Jak mogę się dowiedzieć, w którym katalogu działa moja aplikacja konsoli w języku C #?
Jak mogę się dowiedzieć, w którym katalogu działa moja aplikacja konsoli w języku C #?
Odpowiedzi:
Aby uzyskać katalog, w którym znajduje się plik .exe:
AppDomain.CurrentDomain.BaseDirectory
Aby uzyskać bieżący katalog:
Environment.CurrentDirectory
System.AppContext.BaseDirectory
.
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.
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Lokalizacja)
W .NET można użyć System.Environment.CurrentDirectory
do pobrania katalogu, z którego został uruchomiony proces.
System.Reflection.Assembly.GetExecutingAssembly().Location
poda 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).
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)
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 \
Użyj AppContext.BaseDirectory
dla .net5.