Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 31124|Svare: 2

[Konsollprogram] Vær forsiktig med System.Environment.CurrentDirectory for å få den nåværende katalogen

[Kopier lenke]
Publisert på 10.11.2020 15:04:17 | | | |
I mitt nylige arbeid ønsker jeg å lage et lite verktøy for kundepåminnelser; Naturligvis må winform-programmet lese konfigurasjonsfilen til samme mappe som applikasjonen (ikke exe.config-filen);

For å lese katalogen der den nåværende applikasjonen befinner seg, tenkte jeg umiddelbart på System.Environment.CurrentDirectory for å få den nåværende arbeidskatalogen. Programmet ser ut til å kjøre feilfritt;

Da jeg kom på jobb neste morgen, dukket det opp: «Les konfigurasjonsfilen mangler». Appen legger til automatisk oppstart. Denne meldingen dukker opp for å lese konfigurasjonsfilens feil, og sjekk umiddelbart om konfigurasjonsfilen i applikasjonskatalogen har blitt slettet av seg selv. Etter å ha sjekket, fant jeg ut at filen fortsatt var der, og jeg avsluttet programmet og kjørte det på nytt

Fortsatt fint, ingen pop-up leseprofil mangler. Så ser du om stien for oppstartsoppføringen i registeret ikke er i katalogen min? Når jeg ser på path-filen, er det greit. Litt forvirret? Logger ut av datamaskinen og prøver å starte på nytt, men det dukker fortsatt opp – konfigurasjonsfilen mangler. Årsaken til at de ikke finner veien vil bli tatt direkte

MessageBox, programmet kjører og finner ut at stien faktisk er denne stien.

Legg til MessageBox-koden og fortsett å starte testen. Da jeg startet opp, oppdaget jeg at den nåværende mappen som dukket opp var C:\Windows\System32, og jeg ble umiddelbart forvirret. Jeg tenkte for meg selv, kan det være at Lao Tzus program gikk helt ned til system32? Sjekker registeret, og sysetm32 har ikke appen min. Til slutt tenkte jeg at det burde være et problem med koden for å få stien.

Etter gjentatte tester ble det funnet at System.Environment.CurrentDirectory faktisk skal hente den nåværende katalogen, men hvis program A kaller program B og program B bruker System.Environment.CurrentDirectory for å hente katalogen. Da er katalogen som oppnås i B-programmet ikke lenger katalogen der B-applikasjonen er plassert; Den blir katalogen der A befinner seg. Det er ikke vanskelig å finne ut at mappen som dukker opp når jeg starter er C:\Windows\System32, fordi oppstartsprogrammet også kalles av en prosess i Windows.

Derfor, hvis winform-programmet ønsker å hente katalogen der den nåværende applikasjonen befinner seg, er det best å ikke bruke System.Environment.CurrentDirectory. I stedet er det: Application.StartupPath På denne måten spiller det ingen rolle hvem som kaller det.

Testkode:




Overført fra:Innloggingen med hyperkoblingen er synlig.




Foregående:K8S-nettverksflannel og kaliko-sammenligning
Neste:C# legger referansebibliotek-DLL-er i undermapper via probing
 Vert| Publisert på 10.11.2020 15:08:26 |
C# er en samling metoder for å få det nåværende programmet kjørende sti

Få hele stien til den nåværende prosessen, inkludert filnavnet (prosessnavn).
streng str = dette. GetType(). Montering. Plassering;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Den fullstendige stien til hovedmodulen som henter den nye prosesskomponenten og knytter den til den aktive prosessen, inkludert filnavnet (prosessnavn).
streng str = System.Diagnostics.Process.GetCurrentProcess(). MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

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

Henter basismappen til det nåværende applikasjonsdomenet til den nåværende Threaden, som brukes av assembly-konfliktløseren for å undersøke assemblyen.
streng str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Hent og sett navnet på mappen som inneholder applikasjonen. (Anbefalt)
streng str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Få veien til den kjørbare filen som startet applikasjonen, med unntak av navnet på den kjørbare filen.
streng str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

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

Få den nåværende arbeidsmappen til applikasjonen (upålitelig).
streng str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Publisert på 22.09.2021 20:38:52 |
Lær å lære...
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com