获取C#可执行文件运行路径的最佳方法是什么?C#可执行文件执行目录
我需要使用它的临时文件夹等,目前我使用:
Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
但后来我需要做:
.Replace("file:\\", string.Empty)
,因为这给了我一个URI路径类型(即有一个文件:\在开始)这是我的代码的其他部分无法使用。
获取C#可执行文件运行路径的最佳方法是什么?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)
这是通过任何C#项目(winforms,wpf,控制台等)获取可执行文件路径的唯一可靠方式,当然也是原始问题的最佳答案。但是,在这种情况下,它听起来像是应该使用ApplicationData中的特定于应用程序的文件夹。我会避免使用临时目录,除非它是真正的临时目录(即:这些文件不会超过几秒钟或在特定过程中使用)。我经常清理我的临时文件夹。 – wasatchwizard
为什么你需要“Path.GetDirectoryName()”,Location属性似乎已经提供了完整的路径。 –
@MikeK Location包含文件名,但仅需要目录(请参阅此问题的标题);-) –
尝试:
Application.StartupPath
它应该返回的路径不包括可执行文件的文件名。
'Application.StartupPath'仅适用于WinForms(即:通过引用System.Windows.Forms程序集)。 。[链接](http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath(v = vs.110).aspx) – wasatchwizard
是的,忘了提及,@wasatchwizard ,对您的评论+1。 – Rolice
试用Environment.CurrentDirectory
这将返回当前工作目录的文件夹。
对于临时文件夹等,请不要使用该目录执行出于安全原因... MS有一些内置的是:
可以使用ApplicationData
(漫游用户)或LocalApplicationData
(非或者CommonApplicationData
(对于非用户相关的东西)Environment.SpecialFolder
- 在这些文件夹中创建的任何东西(文件+文件夹)已经为运行您应用的用户设置了所需的权限/权限 - 没有人管理员)可以去那里...使它更加安全,你可以加密你放在那里的数据...
看到http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx
串executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly()。位置); string txtfile = Path.Combine(executableLocation,“example.txt”);
如果程序集已被阴影复制,则Assembly.Location
将指向dll的阴影副本。
如果你想知道构建输出目录使用Assembly.CodeBase
的位置,即:如果你想运行测试套件的时候,从组件的目录访问其他资源例如
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath)
有用。
我会说这*是准确的答案。临时文件应该转到临时文件夹。这就是它的目的。 –
还有'Path.GetTempPath()'.. – wasatchwizard