2011-08-11 271 views
5

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

我需要使用它的临时文件夹等,目前我使用:

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

但后来我需要做:

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

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

回答

23
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 
+0

这是通过任何C#项目(winforms,wpf,控制台等)获取可执行文件路径的唯一可靠方式,当然也是原始问题的最佳答案。但是,在这种情况下,它听起来像是应该使用ApplicationData中的特定于应用程序的文件夹。我会避免使用临时目录,除非它是真正的临时目录(即:这些文件不会超过几秒钟或在特定过程中使用)。我经常清理我的临时文件夹。 – wasatchwizard

+0

为什么你需要“Path.GetDirectoryName()”,Location属性似乎已经提供了完整的路径。 –

+1

@MikeK Location包含文件名,但仅需要目录(请参阅此问题的标题);-) –

1

尝试:

Application.StartupPath 

它应该返回的路径不包括可执行文件的文件名。

+1

'Application.StartupPath'仅适用于WinForms(即:通过引用System.Windows.Forms程序集)。 。[链接](http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath(v = vs.110).aspx) – wasatchwizard

+0

是的,忘了提及,@wasatchwizard ,对您的评论+1。 – Rolice

3

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

3

对于临时文件夹等,请不要使用该目录执行出于安全原因... MS有一些内置的是:

可以使用ApplicationData(漫游用户)或LocalApplicationData(非或者CommonApplicationData(对于非用户相关的东西)Environment.SpecialFolder - 在这些文件夹中创建的任何东西(文件+文件夹)已经为运行您应用的用户设置了所需的权限/权限 - 没有人管理员)可以去那里...使它更加安全,你可以加密你放在那里的数据...

看到http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

0

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

1

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

如果你想知道构建输出目录使用Assembly.CodeBase的位置,即:如果你想运行测试套件的时候,从组件的目录访问其他资源例如

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

有用。