获取当前文件夹路径

时间:2013-03-27 07:45:18

标签: c# .net winforms path

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

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

有什么想法吗?

12 个答案:

答案 0 :(得分:287)

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

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

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

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

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

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

答案 1 :(得分:106)

System.AppDomain.CurrentDomain.BaseDirectory

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

答案 2 :(得分:29)

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

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

...至少演示一些不同方法之间的区别。

答案 3 :(得分:23)

答案 4 :(得分:20)

string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

来自Path.GetDirectoryName

  

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

来自Application.ExecutablePath

  

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

答案 5 :(得分:19)

使用此,

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

你也可以使用它。

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

答案 6 :(得分:6)

1

Directory.GetCurrentDirectory();

2

Thread.GetDomain().BaseDirectory

3

Environment.CurrentDirectory

答案 7 :(得分:5)

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

(代替AppDomain.CurrentDomain.BaseDirectory

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

祝你好运