291

我想创建一个转换文件的程序。我希望用户能够将可执行文件放在任何目录中,并且在执行该程序时(双击 .exe),我希望该程序能够处理当前文件夹中存在 exe 文件的所有文件。程序如何确定它当前正在执行的路径?

我试过System.Windows.Forms.Application.StartupPath了,但这似乎是错误的方式。

有任何想法吗?

4

13 回答 13

420

您不应该您的情况下使用Directory.GetCurrentDirectory(),因为当前目录可能与执行文件夹不同,尤其是当您通过快捷方式执行程序时。

最好Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);用于您的目的。这将返回当前正在执行的程序集所在的路径名。

正如Soner Gönül在他的回答中所说,虽然我建议的方法允许您区分正在执行的程序集、入口程序集或任何其他加载的程序集,

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

也可能就足够了。这将等于

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
于 2013-03-27T07:47:05.550 回答
189
System.AppDomain.CurrentDomain.BaseDirectory

这将为您提供应用程序的运行目录。这甚至适用于 Web 应用程序。之后,您可以访问您的文件。

于 2014-05-07T09:22:19.427 回答
55

我使用以下代码创建了一个简单的控制台应用程序:

Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);

我将生成的可执行文件复制到C:\temp2. 然后,我在 中放置了该可执行文件的快捷方式C:\temp3,并运行它(一次来自 exe 本身,一次来自快捷方式)。它两次都给出了以下输出:

C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2

虽然我确信肯定有一些cockamamie 理由来解释为什么有五种不同的方法可以做几乎完全相同的事情,但我当然不知道它是什么。然而,在大多数情况下,您似乎可以自由选择您喜欢的任何一个。

更新: 我修改了快捷方式属性,将“开始于:”字段更改为C:\temp3. 这导致以下输出:

C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3

...这至少证明了不同方法之间的一些区别。

于 2015-09-01T19:19:32.243 回答
27

尝试这个:

System.Environment.CurrentDirectory

于 2013-03-27T07:47:44.233 回答
23
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

Path.GetDirectoryName

返回指定路径字符串的目录信息。

Application.ExecutablePath

获取启动应用程序的可执行文件的路径,包括可执行文件名称。

于 2013-03-27T07:48:23.740 回答
22

用这个,

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

您也可以使用它。

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
于 2013-03-27T07:47:32.880 回答
14

对于.NET CORE使用System.AppContext.BaseDirectory

(作为替代品AppDomain.CurrentDomain.BaseDirectory

于 2018-11-17T20:32:48.613 回答
6

1.

Directory.GetCurrentDirectory();

2.

Thread.GetDomain().BaseDirectory

3.

Environment.CurrentDirectory
于 2013-03-27T07:50:02.710 回答
1

这对我最有效,尤其是在使用 dotnet core 单文件发布时。 Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName).

于 2020-04-17T12:14:47.530 回答
0

使用Application.StartupPathimo 获得最佳结果。

于 2018-04-04T18:43:47.427 回答
0

此代码块以字符串类型创建应用程序目录的路径

string path="";
path=System.AppContext.BaseDirectory;

祝你好运

于 2020-08-07T10:22:58.377 回答
0

如果你想要exe路径,你可以使用System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);

于 2019-01-16T21:00:21.487 回答
-1

这对我有用:

 var currentDir = Directory.GetCurrentDirectory().Substring(0, Directory.GetCurrentDirectory().LastIndexOf("bin"));
于 2022-03-01T20:11:50.147 回答