获取当前文件夹路径
我想创建一个转换文件的程序。我希望用户能够将可执行文件放置在任何目录中,并且在执行该程序时(双击.exe),我希望程序处理exe文件存在的当前文件夹中的所有文件。程序如何确定它当前正在执行的路径?我试过System.Windows.Forms.Application.StartupPath
,但这似乎是错误的方法。获取当前文件夹路径
任何想法?
你应该你的情况不使用Directory.GetCurrentDirectory()
,为当前目录可以从执行文件夹不同,尤其是当你通过一个快捷方式执行程序。
为了您的目的,最好使用Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
。这将返回当前正在执行的程序集所在的路径名。
虽然我的建议的方法可以让你执行的程序集,进入组件或任何其它加载的程序集区分开来,如Soner格尼尔他回答说,
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);
返回指定路径字符串的目录信息。
获取启动了应用程序,包括 可执行文件名的可执行文件的路径。
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
System.AppDomain.CurrentDomain.BaseDirectory
这会给你运行你的应用程序的目录。这甚至适用于Web应用程序。之后,您可以访问您的文件。
这是用于此目的最准确的属性。即使AppDomain是动态创建的,以查看来自不同位置的程序集,CurrentDomain的BaseDirectory也将始终指向正确的位置。 – dhruvin 2015-04-21 03:05:54
我创建用下面的代码一个简单的控制台应用:
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
虽然我敢肯定,必须有某种繁琐理由来解释为什么有五个做几乎同样的事情不同的方法,我当然不要”不知道它是什么。尽管如此,在大多数情况下,你可以自由选择你喜欢的任何一个。
UPDATE: 我修改快捷方式的属性,改变 “开始:” 字段C:\temp3
。这导致下面的输出:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
...这表明至少一些的不同方法之间的区别。
非常感谢。 – baj9032 2017-07-10 10:11:23
GetEntryAssembly()和GetExecutingAssembly()有一个有趣的区别。有关详细信息,请参阅http://stackoverflow.com/a/18562036/30289 – bhadra 2013-11-08 08:42:40
正如我所说:这将返回当前正在执行的程序集*所在的路径名。 'GetEntryAssembly'和'GetExecutingAssembly'之间的区别并不令人意外,这一点在函数名称中也很明显。如果他们也这样做,为什么应该有两个功能? :-) – 2013-11-08 08:49:14
+1 Assembly.GetEntryAssembly()帮助我通过clickonce运行应用程序 – Artiom 2014-01-09 13:50:09