Wie finde ich heraus, in welchem ​​Verzeichnis meine Konsolen-App ausgeführt wird?


90

Wie finde ich heraus, in welchem ​​Verzeichnis meine Konsolen-App mit C # ausgeführt wird?

Antworten:


159

So rufen Sie das Verzeichnis ab, in dem sich die EXE-Datei befindet:

AppDomain.CurrentDomain.BaseDirectory

So rufen Sie das aktuelle Verzeichnis ab:

Environment.CurrentDirectory

2
Vielen Dank. Hilft, wenn sich die C # .exe in einem Ordner befindet, aber von einem anderen Ordner aufgerufen wird (z. B. wenn sie sich auf dem
Systempfad befindet

11
Für .NET Core ist dies der Fall System.AppContext.BaseDirectory.
NightOwl888

15

Abhängig von den für Ihre Anwendung gewährten Rechten, unabhängig davon, ob das Kopieren von Schatten aktiviert ist oder nicht, und anderen Aufruf- und Bereitstellungsoptionen können unterschiedliche Methoden funktionieren oder zu unterschiedlichen Ergebnissen führen, sodass Sie Ihre Waffe mit Bedacht auswählen müssen. Allerdings führen alle folgenden Aktionen für eine vollständig vertrauenswürdige Konsolenanwendung, die lokal auf dem Computer ausgeführt wird, auf dem sie sich befindet, zum gleichen Ergebnis:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

Sie müssen die Dokumentation der oben genannten Mitglieder konsultieren, um die genauen erforderlichen Berechtigungen zu erhalten.



3

In .NET können Sie System.Environment.CurrentDirectorydas Verzeichnis abrufen, aus dem der Prozess gestartet wurde.
System.Reflection.Assembly.GetExecutingAssembly().Locationzeigt Ihnen den Speicherort der aktuell ausgeführten Assembly an (dies ist nur interessant, wenn die aktuell ausgeführte Assembly von einem anderen Ort als dem Speicherort der Assembly geladen wird, an dem der Prozess gestartet wurde).


1

Unter Windows (nicht sicher über Unix usw.) ist dies das erste Argument in der Befehlszeile.

In C / C ++ wird das Element in argv * angezeigt

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)


Ja, das gilt auch für .NET. Das erste Argument ist immer der vollständige Pfad der ausführbaren Datei.
Adam Neal

1

Application.StartUpPath;


Möchten Sie auf eine Dokumentation verlinken?
John Sheehan

0

Angenommen, der Projektname Ihrer .Net-Kernkonsolenanwendung lautet DataPrep.

Projektbasisverzeichnis abrufen:

Console.WriteLine(Environment.CurrentDirectory);

Ausgabe: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

Ausgabe: ~ DataPrep \


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.