Jak mogę się dowiedzieć, w którym katalogu działa moja aplikacja konsoli w języku C #?
c#
.net
console-application
John Sheehan
źródło
źródło
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.
źródło
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Lokalizacja)
źródło
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).źródło
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)
źródło
Application.StartUpPath;
źródło
Powiedzmy, że nazwa projektu aplikacji konsoli .Net core to DataPrep.
Pobierz katalog podstawowy projektu:
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 \
źródło
Użyj
AppContext.BaseDirectory
dla .net5.źródło