如何找出我的控制台应用程序正在哪个目录中运行?


91

如何找出我的控制台应用程序正在使用C#运行的目录?

Answers:


159

要获取.exe文件所在的目录:

AppDomain.CurrentDomain.BaseDirectory

要获取当前目录:

Environment.CurrentDirectory

2
谢谢。帮助C#.exe在一个文件夹中但从另一个文件夹调用时(例如:当它在系统PATH上时)
DeepSpace101

14
对于.NET Core,它是System.AppContext.BaseDirectory
NightOwl888'7

15

根据授予您的应用程序的权限(无论影象复制是否有效以及其他调用和部署选项),不同的方法可能起作用或产生不同的结果,因此您必须明智地选择武器。话虽如此,对于在其所驻留的计算机上本地执行的完全受信任的控制台应用程序,以下所有内容将产生相同的结果:

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

您将需要查阅上述成员的文档,以查看所需的确切权限。



3

在.NET中,您可以System.Environment.CurrentDirectory用来获取启动过程的目录。
System.Reflection.Assembly.GetExecutingAssembly().Location会告诉您当前正在执行的程序集的位置(只有当当前正在执行的程序集是从不同于进程开始的程序集位置的其他位置加载时,这才很有趣)。


1

在Windows(不确定Unix等)上,它是命令行中的第一个参数。

在argv *中的C / C ++激发项中

WinAPI-GetModuleFileName(NULL,char *,MAX_PATH)


是的,.NET也是如此。First arg始终是可执行文件的完整路径。
亚当·尼尔

1

Application.StartUpPath;


愿意链接到一些文档吗?
约翰·希恩

0

假设您的.Net核心控制台应用程序项目名称为DataPrep。

获取项目基础目录:

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 \


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.