Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 31124|Odpověď: 2

[Konzolový program] Buďte opatrní u System.Environment.CurrentDirectory pro získání aktuálního adresáře

[Kopírovat odkaz]
Zveřejněno 10.11.2020 15:04:17 | | | |
Ve své nedávné práci chci vytvořit malý nástroj pro připomínky klientů; Přirozeně musí program winform číst konfigurační soubor stejného adresáře jako aplikace (nikoli exe.config soubor);

Abych si přečetl adresář, kde se aktuální aplikace nachází, hned mě napadlo System.Environment.CurrentDirectory, abych získal aktuální pracovní adresář. Program běží bezchybně;

Když jsem ráno přišel do práce, objevilo se to: "Přečíst chybějící konfigurační soubor". Aplikace přidává automatické spuštění při startu. Tato zpráva se zobrazí pro čtení selhání konfiguračního souboru a okamžitou kontrolu, zda konfigurační soubor v adresáři aplikace nebyl smazán sám od sebe. Po kontrole jsem zjistil, že soubor tam stále je, tak jsem program ukončil a znovu ho spustil

Stále v pořádku, žádný vyskakovací profil pro čtení nechybí. Pak zjistit, jestli cesta k bootovacímu záznamu v registru není v mém adresáři? Když se podívám na soubor s cestou, je to v pořádku. Trochu zmatený? Odhlásím se z počítače a zkusím restart, ale stále se objeví konfigurační soubor. Důvod, proč nemůžete najít cestu, bude přímo vysvětlen

MessageBox, program sběží a zjistí, že cesta je skutečně tato cesta.

Přidejte kód MessageBox a pokračujte v bootování testu. Když jsem spustil počítač, zjistil jsem, že aktuální adresář byl C:\Windows\System32, a hned jsem byl zmatený. Říkal jsem si, jestli by to mohlo být tím, že program Lao Tzua běží až na system32? Kontroluji registr a sysetm32 nemá mou aplikaci. Nakonec jsem si myslel, že by měl být problém s kódem, aby se cesta dostala.

Po opakovaném testování bylo zjištěno, že System.Environment.CurrentDirectory skutečně získává aktuální adresář, ale pokud program A volá program B a program B používá System.Environment.CurrentDirectory k získání adresáře. Pak adresář získaný v programu B již není adresářem, kde se aplikace B nachází; Stává se adresářem, kde se nachází A. Není těžké zjistit, že adresář, který se objeví při startu, je C:\Windows\System32, protože program pro samospuštění při startu je také volán procesem ve Windows.

Proto, pokud chce program winform získat adresář, kde se aktuální aplikace nachází, je nejlepší nepoužívat System.Environment.CurrentDirectory. Místo toho je to: Application.StartupPath Takto nezáleží na tom, kdo to volá.

Testovací kód:




Převedeno z:Přihlášení k hypertextovému odkazu je viditelné.




Předchozí:Srovnání síťových flanelů a pláten K8S
Další:C# umisťuje referenční knihovní DLL do podsložek pomocí sondování
 Pronajímatel| Zveřejněno 10.11.2020 15:08:26 |
C# je kolekce metod pro získání aktuální běžící cesty programu

Získejte celou cestu k aktuálnímu procesu, včetně názvu souboru (název procesu).
String str = toto. GetType(). Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Celá cesta k hlavnímu modulu, který přijímá novou komponentu Process a přiřazuje ji k aktuálně aktivnímu procesu, včetně názvu souboru (název 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íská základní adresář aktuální aplikační domény aktuálního vlákna, který používá assemblerový řešič konfliktů k prozkoumání assembleru.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Získejte a nastavte název adresáře, který aplikaci obsahuje. (Doporučeno)
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Získejte cestu k spustitelnému souboru, který aplikaci spustil, kromě názvu spustitelného souboru.
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ískejte aktuální pracovní adresář aplikace (nespolehlivé).
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Zveřejněno 22.09.2021 20:38:52 |
Uč se učit...
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com