wake-up-neo.com

获取当前文件夹路径

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

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

有任何想法吗?

179
user2214609

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

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

虽然我建议的方法允许您区分正在执行的程序集,条目程序集或任何其他已加载的程序集,如SonerGönül在其答案中所述,

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

也可能就足够了。这等于

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
285
Thorsten Dittmar
System.AppDomain.CurrentDomain.BaseDirectory

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

105
hakan

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

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

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

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

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

......至少证明了不同方法之间区别的some

28
kmote
23
Hossein Narimani Rad
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

来自 Path.GetDirectoryName

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

来自 Application.ExecutablePath

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

20
Soner Gönül

用这个,

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

你也可以使用它。

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
18
fhnaseer

1。

Directory.GetCurrentDirectory();

2。

Thread.GetDomain().BaseDirectory

3。

Environment.CurrentDirectory
6
Tomtom

for .NET CORE use System.AppContext.BaseDirectory

(作为AppDomain.CurrentDomain.BaseDirectory的替代品)

4
yonatan

使用 Application.StartupPath 获得最佳结果imo。

0
farosch

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

0
Howard Rothenburg