获取当前文件夹路径

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

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

什么好主意吗?

638705 次浏览

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

最好使用Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);来实现你的目的。这将返回当前执行程序集所在的路径名。

虽然我建议的方法允许你区分正在执行的程序集、入口程序集或任何其他加载的程序集,正如儿子Gonul在他的回答中所说,

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

也许也足够了。这就等于

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

用这个,

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

你也可以用这个。

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

Path.GetDirectoryName

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

Application.ExecutablePath

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

1.

Directory.GetCurrentDirectory();

2.

Thread.GetDomain().BaseDirectory

3.

Environment.CurrentDirectory
System.AppDomain.CurrentDomain.BaseDirectory

这将为您提供应用程序的运行目录。这甚至适用于web应用程序。然后你就可以拿到你的文件了。

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

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

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

< >强更新: 我修改了快捷方式属性,将“Start In:”字段更改为C:\temp3。这将导致以下输出:

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

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

在我看来,使用Application.StartupPath来获得最好的结果。

对于net核心使用System.AppContext.BaseDirectory

(替换AppDomain.CurrentDomain.BaseDirectory)

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

这对我来说是最好的,特别是在使用dotnet核心单文件发布时。 Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)。< / p >

这段代码以字符串类型创建了应用程序目录的路径

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

祝你好运

如果你想要项目文件夹的路径,你也可以这样做:

        DirectoryInfo di = new DirectoryInfo(".");
//OR
DirectoryInfo di = new DirectoryInfo("../../../");


Console.WriteLine(di.FullName);

< >强结果: c# D: \开发\ \ ProjectFolder \ ProjectFolder \ < / p >