Sollte ich AppDomain.CurrentDomain.BaseDirectory oder System.Environment.CurrentDirectory verwenden?


86

Ich habe zwei exe-Dateien im selben Ordner. Ich kann exe2 über eine Schaltfläche in exe1 ausführen. Heute habe ich einen Kunden während einer Remote-Sitzung (Terminaldienste) beobachtet und exe2 konnte den Fehler "Datei nicht gefunden" nicht ausführen, aber exe1 befand sich bei der Überprüfung im selben Verzeichnis. Sollte ich also AppDomain.CurrentDomain.BaseDirectory oder System.Environment.CurrentDirectory verwenden ?

Vielen Dank


@Jade M Wie führen Sie Ihre exe1 am Terminal aus?
Frau Sonia

Ich möchte , dass meine zwei Cent hinzufügen , indem Sie das zu sagen string.GetFullPath(path)Verwendungen Environment.CurrentDirectorystatt CurrentDomain.BaseDirectory, zu meiner Überraschung.
JBSnorro

Antworten:


186

Wenn Sie Dateien im selben Verzeichnis wie Ihre Anwendung suchen möchten, AppDomain.CurrentDomain.BaseDirectoryist dies die richtige Wahl.

Environment.CurrentDirectoryist ein Wert, der sich im Laufe der Ausführung Ihrer Anwendung ändern kann und wird. Unter Verwendung von Standardparametern ändert der OpenFileDialog in WinForms diesen Wert beispielsweise in das Verzeichnis, aus dem die Datei ausgewählt wurde.


Ich habe button1 verwendet, um OpenFileDialog anzuzeigen, und button2, um Environment.CurrentDirectory anzuzeigen, aber immer noch den Debug-Ordner anzuzeigen. Warum?
Lei Yang

18

AppDomain.CurrentDomain.BaseDirectoryGibt das Verzeichnis zurück, aus dem die aktuelle Anwendungsdomäne geladen wurde.
System.Environment.CurrentDirectoryGibt das aktuelle Systemverzeichnis zurück.
In Ihrem Fall AppDomain.CurrentDomain.BaseDirectoryist die beste Lösung.


1
System.Environment.CurrentDirectory gibt das aktuelle (prozessspezifische) Arbeitsverzeichnis zurück .
Oskar Berggren

14

Sie sollten verwenden AppDomain.CurrentDomain.BaseDirectory.

Zum Beispiel in einer Windows Services-Anwendung:

System.Environment.CurrentDirectorygibt C: \ Windows \ system32 zurück

Während

AppDomain.CurrentDomain.BaseDirectory gibt [Application.exe location] zurück

Ein weiterer wichtiger Faktor ist, dass AppDomain.CurrentDomain.BaseDirectoryes sich um eine schreibgeschützte Eigenschaft handelt, während Environment.CurrentDirectorydies bei Bedarf etwas anderes sein kann:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   

6

So wie ich es verstehe, sollten Sie verwenden BaseDirectory. CurrentDirectorykönnte sich im Laufe der Programmausführung ändern.



2

Ich benutze normalerweise so etwas wie:

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");

2

Ich habe diese Tage auch durchgemacht, als ich sie benutzte

Environment.CurrentDirectory

da es mir ein Problem auf dem Produktionsserver gab, aber mit meinem lokalen Server gut funktionierte,

Also habe ich es mit versucht

System.AppDomain.CurrentDomain.BaseDirectory;

Und es hat bei mir sowohl in der Umwelt als auch in der Umwelt funktioniert.

Also, wie alle gesagt haben, sollten wir immer mitgehen

System.AppDomain.CurrentDomain.BaseDirectory;

während es das aktuelle Domänenverzeichnis auf den Pfad überprüft.

Weitere Informationen finden Sie hier

Ein Teil des Pfadfehlers auf dem Server konnte nicht gefunden werden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.