如何使用 C# 查找控制台应用程序所在的目录?
获取.exe文件所在的目录:
AppDomain.CurrentDomain.BaseDirectory
获取当前目录:
Environment.CurrentDirectory
根据授予应用程序的权限,无论是否生效 影子复制 ,以及其他调用和部署选项,不同的方法可能会起作用或产生不同的结果,因此您需要明智地选择。话虽如此, 对于在本地执行的完全受信任的控制台应用程序,以下所有内容将产生相同的结果:
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );
您需要查阅上述成员的文档以了解所需的确切权限。
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
System.Environment.CurrentDirectory
来获取启动进程的目录。System.Reflection.Assembly.GetExecutingAssembly().Location
将告诉您当前正在执行的程序集的位置(仅在当前执行的程序集从启动进程的位置不同的地方加载时才有趣)。Console.WriteLine(Environment.CurrentDirectory);
输出: ~DataPrep\bin\Debug\netcoreapp2.2
Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);
输出:~DataPrep\
在Windows操作系统上(不确定Unix等其他操作系统),它是命令行中的第一个参数。
在C/C++中,它是argv*中的第一项。
WinAPI - GetModuleFileName(NULL, char*, MAX_PATH)
Application.StartUpPath;
在 .net5 中使用 AppContext.BaseDirectory
。
string currentDirectory = Directory.GetCurrentDirectory();
Console.WriteLine("Working dir: " + currentDirectory);
System.AppContext.BaseDirectory
。 - NightOwl888