获取当前文件夹路径

use*_*609 194 .net c# path winforms

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

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

有任何想法吗?

Tho*_*mar 300

你应该使用Directory.GetCurrentDirectory()你的情况,当前目录可以从执行文件夹不同,尤其是当你通过一个快捷方式执行程序.

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

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

System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Run Code Online (Sandbox Code Playgroud)

也可能就足够了.这等于

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Run Code Online (Sandbox Code Playgroud)

  • GetEntryAssembly()和GetExecutingAssembly()有一个有趣的区别.有关详细信息,请参阅http://stackoverflow.com/a/18562036/30289 (8认同)
  • 这是在System.Reflection中,所以`System.Reflection.Assembly.GetExecutingAssembly().Location`是完整的 - 如果你从立即窗口测试 (8认同)
  • 正如我所说:这将返回*当前正在执行的程序集*所在的路径名."GetEntryAssembly"和"GetExecutingAssembly"之间的区别并没有那么令人惊讶,功能名称也很明显.如果他们这样做,为什么要有两个功能呢?:-) (3认同)
  • +1 Assembly.GetEntryAssembly()帮助我通过clickonce运行应用程序 (2认同)

hak*_*kan 124

System.AppDomain.CurrentDomain.BaseDirectory
Run Code Online (Sandbox Code Playgroud)

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

  • 这是用于此目的的最准确属性.即使动态创建AppDomain以从不同位置查看程序集,CurrentDomain的BaseDirectory也将始终指向正确的位置. (8认同)

kmo*_*ote 36

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

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);
Run Code Online (Sandbox Code Playgroud)

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

C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Run Code Online (Sandbox Code Playgroud)

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

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

C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
Run Code Online (Sandbox Code Playgroud)

......至少展示了不同方法之间的一些区别.


Hos*_*Rad 22

试试这个:

System.Environment.CurrentDirectory

  • `Environment.CurrentDirectory` 可以通过多种方式更改...(shotrtcut 设置等) (2认同)

Son*_*nül 20

string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Run Code Online (Sandbox Code Playgroud)

Path.GetDirectoryName

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

Application.ExecutablePath

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


fhn*_*eer 19

用这个,

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 
Run Code Online (Sandbox Code Playgroud)

你也可以使用它.

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Run Code Online (Sandbox Code Playgroud)


Tom*_*tom 5

1.

Directory.GetCurrentDirectory();
Run Code Online (Sandbox Code Playgroud)

2.

Thread.GetDomain().BaseDirectory
Run Code Online (Sandbox Code Playgroud)

3.

Environment.CurrentDirectory
Run Code Online (Sandbox Code Playgroud)


yon*_*tan 5

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

(代替AppDomain.CurrentDomain.BaseDirectory