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