In mijn recente werk wil ik een klein hulpmiddel maken voor klantherinneringen; Natuurlijk moet het winform-programma het configuratiebestand van dezelfde map als de applicatie lezen (niet het exe.config-bestand);
Om de map te lezen waar de huidige applicatie zich bevindt, dacht ik meteen aan System.Environment.CurrentDirectory om de huidige werkmap te krijgen. Het programma lijkt vlekkeloos te verlopen;
Toen ik de volgende ochtend op mijn werk kwam, verscheen het: "Configuratiebestand lezen ontbreekt". De app voegt automatisch opstarten toe. Dit bericht verschijnt om de configuratiebestandfout te lezen, direct te controleren of het configuratiebestand in de applicatiemap vanzelf is verwijderd. Na het controleren zag ik dat het bestand er nog steeds was, en ik heb het programma afgesloten en opnieuw uitgevoerd
Nog steeds prima, geen pop-up profiel ontbreekt. Kijk dan of het pad van de opstartvermelding in het register niet in mijn map staat? Als je naar het padbestand kijkt, is het in orde. Een beetje in de war? Log uit van de computer en probeer opnieuw te starten, maar het verschijnt nog steeds dat het configuratiebestand ontbreekt. De reden dat je de weg niet kunt vinden, wordt direct aangegeven
MessageBox draait het programma en ontdekt dat het pad inderdaad dit pad is.
Voeg de MessageBox-code toe en ga verder met het opstarten van de test. Toen ik opstartte, zag ik dat de huidige map die verscheen C:\Windows\System32 was, en ik was meteen in de war. Ik dacht bij mezelf, zou het kunnen dat het programma van Lao Tzu tot aan system32 liep? Ik controleer het register en sysetm32 heeft mijn app niet. Tot slot dacht ik dat er een probleem moest zijn met de code om het pad te krijgen.
Na herhaald testen bleek dat System.Environment.CurrentDirectory inderdaad bedoeld is om de huidige map te krijgen, maar als programma A programma B aanroept en programma B System.Environment.CurrentDirectory gebruikt om de map te verkrijgen. Dan is de map die in het B-programma wordt verkregen niet langer de map waarin de B-applicatie zich bevindt; Het wordt de directory waar A zich bevindt. Het is niet moeilijk om te ontdekken dat de map die verschijnt als ik opstart C:\Windows\System32 is, omdat het zelfopstartprogramma ook wordt aangeroepen door een proces in Windows.
Daarom is het het beste om System.Environment.CurrentDirectory niet te gebruiken als het winform-programma de map wil verkrijgen waar de huidige applicatie zich bevindt. In plaats daarvan is het: Application.StartupPath Op deze manier maakt het niet uit wie het oproept.
Testcode:
Overgedragen van:De hyperlink-login is zichtbaar.
|