Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 31124|Odpoveď: 2

[Konzolový program] Dávajte si pozor na System.Environment.CurrentDirectory, aby ste získali aktuálny adresár

[Kopírovať odkaz]
Zverejnené 10. 11. 2020 15:04:17 | | | |
Vo svojej nedávnej práci chcem vytvoriť malý nástroj na pripomienky pre klientov; Samozrejme, program winform musí čítať konfiguračný súbor toho istého adresára ako aplikácia (nie exe.config súbor);

Aby som si prečítal adresár, kde sa aktuálna aplikácia nachádza, okamžite som si spomenul na System.Environment.CurrentDirectory, aby som získal aktuálny pracovný adresár. Program beží bezchybne;

Keď som ráno prišiel do práce, objavilo sa to: "Čítanie konfiguračného súboru chýba". Aplikácia pridáva automatické štartovanie pri štartovaní. Táto správa sa zobrazí na prečítanie zlyhania konfiguračného súboru a okamžité skontrolovanie, či konfiguračný súbor v adresári aplikácie nebol sám vymazaný. Po kontrole som zistil, že súbor tam stále je, tak som program ukončil a spustil ho znova

Stále v poriadku, žiadny vyskakovací profil na čítanie nechýba. Potom sa pozri, či cesta k bootovacej položke v registri nie je v mojom adresári? Keď sa pozriem na path file, je to v poriadku. Trochu zmätený? Odhlásil som sa z počítača a skúsil reštart, stále sa zobrazilo, konfiguračný súbor chýba. Dôvod, prečo nemôžem nájsť cestu, bude priamo vysvetlený

MessageBox, program spustí a zistí, že cesta je skutočne táto cesta.

Pridajte kód MessageBox a pokračujte v spúšťaní testu. Keď som zapol počítač, zistil som, že aktuálny adresár, ktorý sa objavil, bol C:\Windows\System32, a hneď som bol zmätený. Pomyslel som si, či to môže byť tým, že Lao Tzuov program siaha až po system32? Kontrolujem register a sysetm32 nemá moju aplikáciu. Nakoniec som si myslel, že by mal byť problém s kódom na získanie cesty.

Po opakovaných testoch sa zistilo, že System.Environment.CurrentDirectory skutočne získava aktuálny adresár, ale ak program A volá program B a program B používa System.Environment.CurrentDirectory na získanie adresára. Potom adresár získaný v programe B už nie je adresár, kde sa aplikácia B nachádza; Stáva sa adresárom, kde sa nachádza A. Nie je ťažké zistiť, že adresár, ktorý sa objaví pri štarte, je C:\Windows\System32, pretože program na samospúšťanie štartu je tiež volaný procesom vo Windows.

Preto, ak chce program winform získať adresár, kde sa aktuálna aplikácia nachádza, je najlepšie nepoužívať System.Environment.CurrentDirectory. Namiesto toho je to: Application.StartupPath Takto nezáleží na tom, kto to volá.

Testovací kód:




Prenesené z:Prihlásenie na hypertextový odkaz je viditeľné.




Predchádzajúci:Porovnanie K8S sieťových flanelov a calico
Budúci:C# umiestňuje referenčné knižnice DLL do podpriečinkov pomocou sondovania
 Prenajímateľ| Zverejnené 10. 11. 2020 15:08:26 |
C# je zbierka metód na získanie aktuálnej bežiacej cesty programu

Získajte kompletnú cestu k aktuálnemu procesu, vrátane názvu súboru (názov procesu).
reťazec str = toto. GetType(). Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Celá cesta k hlavnému modulu, ktorý dostane novú komponentu Process a priradí ju k aktuálne aktívnemu procesu, vrátane názvu súboru (názov procesu).
string str = System.Diagnostics.Process.GetCurrentProcess(). MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)

Získa základný adresár aktuálnej aplikačnej domény aktuálneho vlákna, ktorý používa riešič konfliktov v assembleri na skúmanie assembleru.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Získajte a nastavte názov adresára, ktorý obsahuje aplikáciu. (Odporúčané)
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Získajte cestu k spustiteľnému súboru, ktorý spustil aplikáciu, okrem názvu spustiteľného súboru.
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Získajte aktuálny pracovný adresár aplikácie (nespoľahlivý).
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Zverejnené 22. 9. 2021 20:38:52 |
Nauč sa učiť...
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com