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é.
|