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?
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);
System.AppDomain.CurrentDomain.BaseDirectory
Dadurch erhalten Sie ein Verzeichnis Ihrer Anwendung. Dies funktioniert sogar für Webanwendungen. Danach können Sie Ihre Datei erreichen.
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.
Versuche dies:
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
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.
Benutze das,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
Sie können dies auch verwenden.
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
für .NET CORE use System.AppContext.BaseDirectory
(als Ersatz für AppDomain.CurrentDomain.BaseDirectory
)
Verwenden Sie Application.StartupPath
, um das beste Ergebnis zu erzielen.
Wenn Sie den Exe-Pfad benötigen, können Sie System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly (). Location) verwenden.