it-swarm.com.de

Aktuellen Ordnerpfad abrufen

Ich möchte ein Programm erstellen, das Dateien konvertiert. Ich möchte, dass der Benutzer die ausführbare Datei in einem beliebigen Verzeichnis ablegen kann. Wenn Sie dieses Programm ausführen (Doppelklick auf die EXE-Datei), möchte ich, dass das Programm alle Dateien im aktuellen Ordner verarbeitet, in dem sich die Exe-Datei befindet existiert. Wie kann das Programm den Pfad ermitteln, in dem es gerade ausgeführt wird?

Ich habe versucht System.Windows.Forms.Application.StartupPath, aber das scheint der falsche Weg zu sein.

Irgendwelche Ideen?

171
user2214609

Sie sollten nicht in Ihrem Fall Directory.GetCurrentDirectory() verwenden, da das aktuelle Verzeichnis vom Ausführungsordner abweichen kann, insbesondere wenn Sie das Programm über eine Verknüpfung ausführen.

Es ist besser, Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); für Ihren Zweck zu verwenden. Dies gibt den Pfadnamen zurück, in dem sich die derzeit ausgeführte Assembly befindet.

Während mein vorgeschlagener Ansatz es Ihnen ermöglicht, zwischen der ausführenden Assembly, der Eingang Assembly oder einer anderen geladenen Assembly zu unterscheiden, wie Soner Gönül in seiner Antwort sagte: 

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

kann auch ausreichend sein. Das wäre gleich

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
271
System.AppDomain.CurrentDomain.BaseDirectory

Dadurch erhalten Sie ein Verzeichnis Ihrer Anwendung. Dies funktioniert sogar für Webanwendungen. Danach können Sie Ihre Datei erreichen.

101
hakan

Ich habe eine einfache Konsolenanwendung mit folgendem Code erstellt:

Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);

Ich habe die resultierende ausführbare Datei nach C:\temp2 kopiert. Ich habe dann eine Verknüpfung zu dieser ausführbaren Datei in C:\temp3 eingefügt und ausgeführt (einmal vom Exe selbst und einmal von der Verknüpfung). Es gab beide Male die folgenden Ausgaben:

C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2

Ich bin mir zwar sicher, dass einige cockamamie Gründe geben müssen, um zu erklären, warum es fünf verschiedene Methoden gibt, die praktisch dasselbe tun, aber ich weiß nicht, was es ist. Dennoch scheint es, dass Sie unter den meisten Umständen die Wahl haben, was Sie möchten.

UPDATE: Ich habe die Shortcut-Eigenschaften geändert und das Feld "Start In:" in C:\temp3 geändert. Dies führte zu folgender Ausgabe:

C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3

... was zumindest einige der Unterschiede zwischen den verschiedenen Methoden demonstriert.

26
kmote
23
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

Von Path.GetDirectoryName

Gibt die Verzeichnisinformationen für die angegebene Pfadzeichenfolge zurück.

Von Application.ExecutablePath

Ruft den Pfad für die ausführbare Datei ab, mit der die Anwendung gestartet wurde, einschließlich des ausführbaren Namens.

20
Soner Gönül

Benutze das,

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

Sie können dies auch verwenden.

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
16
fhnaseer

1.

Directory.GetCurrentDirectory();

2.

Thread.GetDomain().BaseDirectory

3.

Environment.CurrentDirectory
6
Tomtom

für .NET CORE use System.AppContext.BaseDirectory

(als Ersatz für AppDomain.CurrentDomain.BaseDirectory

3
yonatan

Verwenden Sie Application.StartupPath , um das beste Ergebnis zu erzielen. 

0
farosch

Wenn Sie den Exe-Pfad benötigen, können Sie System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly (). Location) verwenden.

0