C#Executable执行目录

获取C#可执行文件的路径的最佳方法是什么?

我需要将它用于临时文件夹等,目前我正在使用:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) 

但我需要做一个:

 .Replace("file:\\", string.Empty) 

因为这给了我一个URI类型路径(即在开头有文件:\),这对我的代码的其他部分是不可用的。

不是你的问题的准确答案,但我建议你看看:

 Path.GetTempFileName() 

http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx

 Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 

尝试使用Environment.CurrentDirectory这将返回当前工作目录的文件夹。

对于临时文件夹等,出于安全原因,您不应该使用执行目录… MS内置了一些内容:

您可以使用来自Environment.SpecialFolder ApplicationData (用于漫游用户)或LocalApplicationData (用于非漫游用户)或CommonApplicationData (用于非用户相关的事物) – 您在这些文件夹中创建的任何内容(文件+文件夹)已经设置为运行你应用程序的用户所需的权限/权限 – 没有其他人(管理员除外)可以去那里……为了更加安全,你可以加密你放在那里的数据……

请参阅http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

尝试:

 Application.StartupPath 

它应该返回没有可执行文件名的路径。

如果程序集已被阴影复制,那么Assembly.Location将指向dll的卷影副本。

如果您想知道构建输出目录的位置,请使用Assembly.CodeBase ,即:

 Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath) 

如果要从程序集目录中访问其他资源(例如运行测试套件时),则非常有用。

string executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly()。Location); string txtfile = Path.Combine(executableLocation,“example.txt”);