Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 31124|Risposta: 2

[Programma Console] Fai attenzione a System.Environment.CurrentDirectory per ottenere la directory corrente

[Copiato link]
Pubblicato su 10/11/2020 15:04:17 | | | |
Nel mio lavoro recente, voglio creare un piccolo strumento per i promemoria ai clienti; Naturalmente, il programma winform deve leggere il file di configurazione della stessa directory dell'applicazione (non il file exe.config);

Per leggere la directory dove si trova l'applicazione attuale, ho subito pensato a System.Environment.CurrentDirectory per ottenere la directory di lavoro attuale. Il programma sembra funzionare alla perfezione;

Quando sono arrivato al lavoro la mattina dopo, è apparso: "Leggi file di configurazione mancante". L'app aggiunge l'avvio automatico di avvio. Questo messaggio appare per leggere il fallimento del file di configurazione, verificando immediatamente se il file di configurazione nella directory dell'applicazione è stato eliminato da solo. Dopo aver controllato, ho scoperto che il file era ancora lì, ho chiuso il programma e l'ho eseguito di nuovo

Ancora tutto a posto, nessun profilo di lettura pop-up manca. Poi vedere se il percorso della voce di avvio nel registro non è nella mia directory? Guardando il file di percorso, va tutto bene. Un po' confuso? Esci dal computer e provo a riavviare, ma continua a comparire il file di configurazione mancante. La ragione per cui non si riesce a trovare la strada verrà presa direttamente

MessageBox, il programma si avvia e scopre che il percorso è effettivamente questo.

Aggiungi il codice MessageBox e continua ad avviare il test. Quando ho avviato, ho scoperto che la directory attuale che compariva era C:\Windows\System32, e sono rimasto subito perplesso. Mi sono chiesto: potrebbe essere che il programma di Lao Tzu sia arrivato fino a system32? Controllo nel registro e sysetm32 non c'è la mia app. Infine, ho pensato che dovesse esserci un problema con il codice per ottenere il percorso.

Dopo ripetuti test, si scoprì che System.Environment.CurrentDirectory è effettivamente per ottenere la directory corrente, ma se il programma A chiama il programma B e il programma B usa System.Environment.CurrentDirectory per ottenere la directory. Allora la directory ottenuta nel programma B non è più quella in cui si trova l'applicazione B; Diventa la directory dove si trova A. Non è difficile trovare che la directory che appare quando avvio è C:\Windows\System32 perché il programma di avvio automatico viene chiamato anche da un processo in Windows.

Pertanto, se il programma winform vuole ottenere la directory in cui si trova l'applicazione corrente, è meglio non usare System.Environment.CurrentDirectory. Invece, è: Application.StartupPath In questo modo, non importa chi lo chiama.

Codice di test:




Trasferito da:Il login del link ipertestuale è visibile.




Precedente:Confronto tra flanella di rete K8S e calico
Prossimo:C# inserisce le DLL delle librerie di riferimento in sottocartelle tramite sonding
 Padrone di casa| Pubblicato su 10/11/2020 15:08:26 |
C# è una raccolta di metodi per ottenere il percorso attuale in esecuzione del programma

Ottieni il percorso completo verso il processo corrente, incluso il nome del file (nome del processo).
stringa str = questa. GetType(). Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Il percorso completo verso il modulo principale che ottiene il nuovo componente Process e lo associa al processo attualmente attivo, incluso il nome del file (nome del processo).
stringa str = System.Diagnostics.Process.GetCurrentProcess(). MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

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

Ottiene la directory base del dominio applicativo corrente del Thread corrente, che viene utilizzata dal risolutore di conflitti assembly per sondare l'assembly.
stringa str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Prendi e imposta il nome della directory che contiene l'applicazione. (Consigliato)
stringa str = DomeSistema.AppDomain.Attuale.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Ottieni il percorso verso il file eseguibile che ha avviato l'applicazione, escludendo il nome dell'eseguibile.
stringa str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

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

Ottieni la directory funzionante attuale dell'applicazione (non affidabile).
stringa str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Pubblicato su 22/09/2021 20:38:52 |
Impara a imparare...
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com