Jak sprawdzić, w którym katalogu działa moja aplikacja konsolowa?

91

Jak mogę się dowiedzieć, w którym katalogu działa moja aplikacja konsoli w języku C #?

John Sheehan
źródło

Odpowiedzi:

160

Aby uzyskać katalog, w którym znajduje się plik .exe:

AppDomain.CurrentDomain.BaseDirectory

Aby uzyskać bieżący katalog:

Environment.CurrentDirectory
Hallgrim
źródło
2
Dzięki. Pomaga, gdy plik C # .exe znajduje się w jednym folderze, ale jest wywoływany z innego folderu (np. Gdy znajduje się w systemie PATH)
DeepSpace101
14
W przypadku platformy .NET Core tak jest System.AppContext.BaseDirectory.
NightOwl888
15

W zależności od praw przyznanych twojej aplikacji, od tego, czy kopiowanie w tle działa, czy nie, oraz innych opcji wywoływania i wdrażania, różne metody mogą działać lub dawać różne wyniki, więc będziesz musiał mądrze wybrać broń. To powiedziawszy, wszystkie poniższe dadzą ten sam wynik dla w pełni zaufanej aplikacji konsolowej, która jest wykonywana lokalnie na komputerze, na którym się znajduje:

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 );

Będziesz musiał zapoznać się z dokumentacją powyższych członków, aby zobaczyć dokładne wymagane uprawnienia.

Atif Aziz
źródło
5

Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Lokalizacja)

Jason Kanaris
źródło
3

W .NET można użyć System.Environment.CurrentDirectorydo pobrania katalogu, z którego został uruchomiony proces.
System.Reflection.Assembly.GetExecutingAssembly().Locationpoda lokalizację aktualnie wykonywanego zestawu (jest to interesujące tylko wtedy, gdy aktualnie wykonywany zestaw jest ładowany z innego miejsca niż lokalizacja zestawu, w którym rozpoczął się proces).

Travis Illig
źródło
1

W systemie Windows (brak pewności co do Uniksa itp.) Jest to pierwszy argument w linii poleceń.

W C / C ++ pierwszy element w argv *

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)

Jakub Kotrla
źródło
Tak, to samo dotyczy .NET. Pierwszy argument to zawsze pełna ścieżka do pliku wykonywalnego.
Adam Neal,
1

Application.StartUpPath;


źródło
chcesz link do jakiejś dokumentacji?
John Sheehan,
0

Powiedzmy, że nazwa projektu aplikacji konsoli .Net core to DataPrep.

Pobierz katalog podstawowy projektu:

Console.WriteLine(Environment.CurrentDirectory);

Wyjście: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

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

Wyjście: ~ DataPrep \

RM Shahidul Islam Shahed
źródło
0

Użyj AppContext.BaseDirectorydla .net5.

vivek nuna
źródło