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


Odpowiedzi:


160

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

AppDomain.CurrentDomain.BaseDirectory

Aby uzyskać bieżący katalog:

Environment.CurrentDirectory

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.



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


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)


Tak, to samo dotyczy .NET. Pierwszy argument to zawsze pełna ścieżka do pliku wykonywalnego.
Adam Neal,

1

Application.StartUpPath;


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 \


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.