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?

John Sheehan
quelle

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
Hallgrim
quelle
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.

Atif Aziz
quelle
5

Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Location)

Jason Kanaris
quelle
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).

Travis Illig
quelle
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)

Jakub Kotrla
quelle
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;


quelle
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 \

RM Shahidul Islam Shahed
quelle
0

Verwenden Sie AppContext.BaseDirectoryfür .net5.

vivek nuna
quelle