Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 31124|Răspunde: 2

[Program de consolă] Fii atent la System.Environment.CurrentDirectory pentru a obține directorul curent

[Copiază linkul]
Postat pe 10.11.2020 15:04:17 | | | |
În lucrările mele recente, vreau să fac un instrument mic pentru memento-urile clienților; Desigur, programul winform trebuie să citească fișierul de configurare al aceluiași director ca aplicația (nu fișierul exe.config);

Pentru a citi directorul unde se află aplicația curentă, m-am gândit imediat la System.Environment.CurrentDirectory pentru a obține directorul de lucru curent. Programul pare să funcționeze impecabil;

Când am venit la muncă a doua zi dimineață, a apărut: "Citește fișierul de configurare lipsă". Aplicația adaugă pornirea automată a bootului. Acest mesaj apare pentru a citi eșecul fișierului de configurare, verificând imediat dacă fișierul de configurare din directorul aplicației a fost șters singur. După ce am verificat, am constatat că fișierul era încă acolo, am ieșit din program și l-am rulat din nou

Tot bine, nu lipsește niciun profil de citire pop-up. Apoi să vezi dacă calea intrării de boot din registru nu este în directorul meu? Uitându-mă la fișierul de traseu, e în regulă. Ești puțin confuz? Mă deconectez de pe calculator și încerc să repornesc, tot apare și fișierul de configurare lipsește. Motivul pentru care nu se poate găsi drumul va fi abordat direct

MessageBox, programul rulează și descoperă că calea este într-adevăr această cale.

Adaugă codul MessageBox și continuă să pornești testul. Când am pornit, am descoperit că directorul curent care a apărut era C:\Windows\System32 și am rămas imediat nedumerit. M-am gândit, oare programul lui Lao Tzu a pornit până la system32? Verificând registrul și sysetm32 nu are aplicația mea. În final, m-am gândit că ar trebui să existe o problemă cu codul pentru a obține calea.

După teste repetate, s-a constatat că System.Environment.CurrentDirectory este într-adevăr pentru a obține directorul curent, dar dacă programul A apelează programul B, iar programul B folosește System.Environment.CurrentDirectory pentru a obține directorul. Atunci directorul obținut în programul B nu mai este directorul în care se află aplicația B; Devine directorul unde se află A. Nu este greu să găsești că directorul care apare când pornesc este C:\Windows\System32, deoarece programul de pornire automată este de asemenea chemat de un proces în Windows.

Prin urmare, dacă programul winform dorește să obțină directorul unde se află aplicația curentă, este mai bine să nu folosească System.Environment.CurrentDirectory. În schimb, este: Application.StartupPath Astfel, nu contează cine îl cheamă.

Cod de test:




Transferat din:Autentificarea cu hyperlink este vizibilă.




Precedent:Comparație între flanela rețelei K8S și calico
Următor:C# pune DLL-uri de biblioteci de referință în subfoldere prin sondare
 Proprietarul| Postat pe 10.11.2020 15:08:26 |
C# este o colecție de metode pentru a obține calea curentă de rulare a programului

Obține calea completă către procesul curent, inclusiv numele fișierului (numele procesului).
string str = aceasta. GetType(). Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Calea completă către modulul principal care primește noua componentă Proces și o asociază cu procesul activ în prezent, inclusiv numele fișierului (numele procesului).
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文件所在的目录)

Primește directorul de bază al domeniului de aplicație curent al firului curent, care este folosit de solutorul de conflicte de asamblare pentru a sonda asamblarea.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Obține și setează numele directorului care conține aplicația. (Recomandat)
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Obține calea către fișierul executabil care a pornit aplicația, excluzând numele executabilului.
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文件名)

Obține directorul funcțional actual al aplicației (nesigur).
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Postat pe 22.09.2021 20:38:52 |
Învață să înveți...
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com