Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 31124|Atbildi: 2

[Konsoles programma] Esiet piesardzīgs ar System.Environment.CurrentDirectory, lai iegūtu pašreizējo direktoriju

[Kopēt saiti]
Publicēts 10.11.2020 15:04:17 | | | |
Savā nesenajā darbā es vēlos izveidot nelielu rīku klientu atgādinājumiem; Protams, winform programmai ir jāizlasa tā paša direktorija konfigurācijas fails kā lietojumprogramma (nevis exe.config fails);

Lai izlasītu direktoriju, kurā atrodas pašreizējā lietojumprogramma, es uzreiz domāju par System.Environment.CurrentDirectory, lai iegūtu pašreizējo darba direktoriju. Šķiet, ka programma darbojas nevainojami;

Kad nākamajā rītā atnācu uz darbu, tas parādījās: "Trūkst lasīt konfigurācijas failu". Lietotne pievieno sāknēšanas automātisko startēšanu. Šis ziņojums parādās, lai izlasītu konfigurācijas faila kļūmi, nekavējoties pārbaudiet, vai konfigurācijas fails lietojumprogrammu direktorijā ir izdzēsts. Pēc pārbaudes es atklāju, ka fails joprojām ir, un es izgāju no programmas un palaidu to vēlreiz

Joprojām labi, netrūkst uznirstošā loga lasīšanas profila. Pēc tam pārbaudiet, vai sāknēšanas ieraksta ceļš reģistrā nav manā direktorijā? Aplūkojot ceļa failu, viss ir kārtībā. Nedaudz apjucis? Izrakstieties no datora un mēģiniet to restartēt, joprojām tiek parādīts, trūkst konfigurācijas faila. Iemesls, kāpēc nevar atrast ceļu, tiks ņemts tieši

MessageBox, programma darbojas un atrod, ka ceļš patiešām ir šis ceļš.

Pievienojiet MessageBox kodu un turpiniet sākt testu. Kad es sāku, es atklāju, ka pašreizējais direktorijs, kas parādījās, bija C: \ Windows \ System32, un es uzreiz biju neizpratnē. Es domāju, vai tas varētu būt, ka Lao Tzu programma nonāca līdz system32? Pārbaudot reģistru un sysetm32, nav manas lietotnes. Visbeidzot, es domāju, ka vajadzētu būt problēmai ar kodu, lai iegūtu ceļu.

Pēc atkārtotas testēšanas tika konstatēts, ka System.Environment.CurrentDirectory patiešām iegūst pašreizējo direktoriju, bet, ja programma A izsauc programmu B un programma B izmanto System.Environment.CurrentDirectory, lai iegūtu direktoriju. Tad B programmā iegūtais direktorijs vairs nav direktorijs, kurā atrodas B lietojumprogramma; Tas kļūst par direktoriju, kurā atrodas A. Nav grūti atrast, ka direktorijs, kas parādās, kad es sāknēju, ir C: \ Windows \ System32, jo sāknēšanas pašstartēšanas programmu izsauc arī Windows process.

Tāpēc, ja winform programma vēlas iegūt direktoriju, kurā atrodas pašreizējā lietojumprogramma, vislabāk nav izmantot System.Environment.CurrentDirectory. Tā vietā tas ir: Application.StartupPath Šādā veidā nav svarīgi, kurš to sauc.

Testa kods:




Pārcelts no:Hipersaites pieteikšanās ir redzama.




Iepriekšējo:K8S tīkla flaneļa un kaliko salīdzinājums
Nākamo:C# ievieto atsauces bibliotēkas DLL apakšmapēs, izmantojot zondēšanu
 Saimnieks| Publicēts 10.11.2020 15:08:26 |
C# ir metožu kolekcija, lai iegūtu pašreizējo programmas darbības ceļu

Iegūstiet pilnu ceļu uz pašreizējo procesu, ieskaitot faila nosaukumu (procesa nosaukumu).
virkne str = šis. GetType(). Montāža.Atrašanās vieta;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Pilns ceļš uz galveno moduli, kas iegūst jauno procesa komponentu un saista to ar pašreiz aktīvo procesu, ieskaitot faila nosaukumu (procesa nosaukumu).
virkne str = System.Diagnostics.Process.GetCurrentProcess(). MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

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

Iegūst pašreizējā pavediena pašreizējā lietojumprogrammas domēna pamatdirektoriju, ko montāžas konfliktu risinātājs izmanto, lai pārbaudītu montāžu.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Iegūstiet un iestatiet direktorija nosaukumu, kurā ir lietojumprogramma. (Ieteicams)
virkne str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Iegūstiet ceļu uz izpildāmo failu, kas startēja lietojumprogrammu, izņemot izpildāmā faila nosaukumu.
virkne str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

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

Iegūstiet pašreizējo lietojumprogrammas darba direktoriju (neuzticams).
virkne str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Publicēts 22.09.2021 20:38:52 |
Iemācieties mācīties...
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com