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