Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 31124|Odgovoriti: 2

[Konzolni program] Bodite previdni pri System.Environment.CurrentDirectory za pridobitev trenutne mape

[Kopiraj povezavo]
Objavljeno na 10. 11. 2020 15:04:17 | | | |
V svojem nedavnem delu želim izdelati majhno orodje za opomnike strank; Seveda mora winform program prebrati konfiguracijsko datoteko iste mape kot aplikacija (ne exe.config datoteke);

Da bi prebral imenik, kjer se nahaja trenutna aplikacija, sem takoj pomislil na System.Environment.CurrentDirectory, da dobim trenutno delovno imenik. Program deluje brezhibno;

Ko sem naslednje jutro prišel v službo, se je pojavilo: "Preberi konfiguracijsko datoteko manjka". Aplikacija doda samodejni zagon zagona. To sporočilo se pojavi za branje napake konfiguracijske datoteke in takoj preveri, ali je konfiguracijska datoteka v aplikacijski mapi sama izbrisana. Po preverjanju sem ugotovil, da je datoteka še vedno tam, zato sem program zaprl in ga ponovno zagnal

Še vedno je v redu, noben pokalen profil za branje ne manjka. Nato preverim, ali pot do zagonskega vnosa v registru ni v moji mapi? Če pogledam datoteko poti, je v redu. Malo zmeden? Odjavi se iz računalnika in poskusi ponovno zagnati, še vedno se pojavi, konfiguracijska datoteka manjka. Razlog, da ne najdeš poti, bo neposredno sprejet

MessageBox, program se zažene in ugotovi, da je pot res ta pot.

Dodaj kodo MessageBox in nadaljuj z zagonom testa. Ko sem zagnal računalnik, sem ugotovil, da se je trenutno prikazala mapa C:\Windows\System32, in takoj sem bil zmeden. Pomislil sem, ali je mogoče, da je program Lao Tzuja segal do system32? Preverjanje registra in sysetm32 ne vsebuje moje aplikacije. Nazadnje sem pomislil, da bi morala biti težava s kodo za pridobitev poti.

Po večkratnem testiranju so ugotovili, da System.Environment.CurrentDirectory res pridobi trenutno imenik, vendar če program A kliče program B, program B pa uporabi System.Environment.CurrentDirectory za pridobitev imenika. Takrat imenik, pridobljen v programu B, ni več imenik, kjer se nahaja aplikacija B; Postane imenik, kjer se nahaja A. Ni težko najti, da se ob zagonu pojavi mapa C:\Windows\System32, saj program za samozagon zagona pokliče tudi proces v Windows.

Zato, če želi winform program pridobiti imenik, kjer se nahaja trenutna aplikacija, je najbolje, da ne uporablja System.Environment.CurrentDirectory. Namesto tega je: Application.StartupPath Tako ni pomembno, kdo ga pokliče.

Testna koda:




Preneseno iz:Prijava do hiperpovezave je vidna.




Prejšnji:Primerjava K8S mrežne flanelaste in kaliko obleke
Naslednji:C# postavlja DLL-je referenčne knjižnice v podmape preko sondiranja
 Najemodajalec| Objavljeno na 10. 11. 2020 15:08:26 |
C# je zbirka metod za pridobitev trenutne tekoče poti programa

Pridobite celotno pot do trenutnega procesa, vključno z imenom datoteke (ime procesa).
niz str = to. GetType(). Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Celotna pot do glavnega modula, ki prejme novo komponento Process in jo poveže z trenutno aktivnim procesom, vključno z imenom datoteke (ime procesa).
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文件所在的目录)

Dobi osnovno mapo trenutne aplikacijske domene trenutne niti, ki jo uporablja reševalnik konfliktov v asemblerju za preiskovanje asemblerja.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Get in nastavi ime imenika, ki vsebuje aplikacijo. (Priporočeno)
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Pridobi pot do izvršljive datoteke, ki je zagnala aplikacijo, brez imena izvršljive datoteke.
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文件名)

Pridobi trenutni delovni imenik aplikacije (nezanesljivo).
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Objavljeno na 22. 09. 2021 20:38:52 |
Nauči se učiti...
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com