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 in dem aktuellen Ordner verarbeitet, in dem sich die exe-Datei befindet . Wie kann das Programm den Pfad bestimmen, in dem es gerade ausgeführt wird?
Ich habe es versucht, System.Windows.Forms.Application.StartupPath
aber das scheint der falsche Weg zu sein.
Irgendwelche Ideen?
GetEntryAssembly
undGetExecutingAssembly
nicht so überraschend ist auch der Funktionsname. Wenn sie dasselbe taten, warum sollte es zwei Funktionen geben? :-)System.Reflection.Assembly.GetExecutingAssembly().Location
ist die vollständige - wenn Sie aus dem Sofortfenster testenDadurch erhalten Sie ein laufendes Verzeichnis Ihrer Anwendung. Dies funktioniert sogar für Webanwendungen. Danach können Sie Ihre Datei erreichen.
quelle
Ich habe eine einfache Konsolenanwendung mit dem folgenden Code erstellt:
Ich habe die resultierende ausführbare Datei nach kopiert
C:\temp2
. Ich habe dann eine Verknüpfung zu dieser ausführbaren Datei eingefügtC:\temp3
und sie ausgeführt (einmal von der Exe selbst und einmal von der Verknüpfung). Es gab beide Male die folgenden Ausgaben:Ich bin mir zwar sicher, dass es einen Cockamamie-Grund geben muss, um zu erklären, warum es fünf verschiedene Methoden gibt , die praktisch genau dasselbe tun, aber ich weiß sicherlich nicht, was es ist. Es scheint jedoch, dass Sie unter den meisten Umständen frei wählen können, welche Sie möchten.
UPDATE: Ich habe die Shortcut-Eigenschaften geändert und das Feld "Start In:" in geändert
C:\temp3
. Dies führte zu folgender Ausgabe:... was zumindest einige der Unterschiede zwischen den verschiedenen Methoden zeigt.
quelle
Versuche dies:
System.Environment.CurrentDirectory
quelle
Environment.CurrentDirectory
kann auf verschiedene Arten geändert werden ... (Shotrtcut-Einstellungen usw.)Von
Path.GetDirectoryName
Von
Application.ExecutablePath
quelle
Benutze das,
Sie können dies auch verwenden.
quelle
für .NET CORE verwenden
System.AppContext.BaseDirectory
(als Ersatz für
AppDomain.CurrentDomain.BaseDirectory
)quelle
1.
2.
3.
quelle
Environment.CurrentDirectory
kann auf verschiedene Arten geändert werden ... (Shotrtcut-Einstellungen usw.)Verwenden Sie
Application.StartupPath
für das beste Ergebnis imo.quelle
Wenn Sie den exe-Pfad möchten, können Sie ihn verwenden
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
quelle
Dies funktioniert am besten für mich, insbesondere bei Verwendung von Dotnet Core Single File Publish.
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
.quelle