Answers:
你应该不使用Directory.GetCurrentDirectory()
你的情况,当前目录可以从执行文件夹不同,尤其是当你通过一个快捷方式执行程序。
最好Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
用于您的目的。这将返回当前正在执行的程序集所在的路径名。
正如SonerGönül在回答中所说的,虽然我建议的方法使您可以区分执行程序集,输入程序集或任何其他加载的程序集,
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
可能也足够。这等于
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
GetEntryAssembly
和之间的区别GetExecutingAssembly
也就不足为奇了。如果他们做的相同,为什么要有两个功能?:-)
System.Reflection.Assembly.GetExecutingAssembly().Location
它也是完整的-如果您从即时窗口进行测试
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
虽然我敢肯定,必须有一些繁琐的理由来解释为什么有五种不同的方法是做几乎同样的事情,我当然不知道它是什么。但是,在大多数情况下,您似乎可以自由选择自己喜欢的任何一种。
更新:
我修改了快捷方式属性,将“开始于:”字段更改为C:\temp3
。结果为以下输出:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
...这证明了不同方法之间的至少一些区别。
Environment.CurrentDirectory
可以通过多种方式进行更改...(shotrtcut设置等)
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
返回指定路径字符串的目录信息。
获取启动应用程序的可执行文件的路径,包括可执行文件的名称。
1。
Directory.GetCurrentDirectory();
2。
Thread.GetDomain().BaseDirectory
3。
Environment.CurrentDirectory
Environment.CurrentDirectory
可以通过多种方式进行更改...(shotrtcut设置等)
使用Application.StartupPath
海事组织最好的结果。