我想创建一个转换文件的程序。我希望用户能够将可执行文件放在任何目录中,并且在执行该程序时(双击 .exe),我希望该程序能够处理当前文件夹中存在 exe 文件的所有文件。程序如何确定它当前正在执行的路径?
我试过System.Windows.Forms.Application.StartupPath
了,但这似乎是错误的方式。
有任何想法吗?
您不应该在您的情况下使用Directory.GetCurrentDirectory()
,因为当前目录可能与执行文件夹不同,尤其是当您通过快捷方式执行程序时。
最好Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
用于您的目的。这将返回当前正在执行的程序集所在的路径名。
正如Soner Gönül在他的回答中所说,虽然我建议的方法允许您区分正在执行的程序集、入口程序集或任何其他加载的程序集,
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
也可能就足够了。这将等于
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().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
虽然我确信肯定有一些cockamamie 理由来解释为什么有五种不同的方法可以做几乎完全相同的事情,但我当然不知道它是什么。然而,在大多数情况下,您似乎可以自由选择您喜欢的任何一个。
更新:
我修改了快捷方式属性,将“开始于:”字段更改为C:\temp3
. 这导致以下输出:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
...这至少证明了不同方法之间的一些区别。
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
返回指定路径字符串的目录信息。
获取启动应用程序的可执行文件的路径,包括可执行文件名称。
用这个,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
您也可以使用它。
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
对于.NET CORE使用System.AppContext.BaseDirectory
(作为替代品AppDomain.CurrentDomain.BaseDirectory
)
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
这对我最有效,尤其是在使用 dotnet core 单文件发布时。
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
.
使用Application.StartupPath
imo 获得最佳结果。
此代码块以字符串类型创建应用程序目录的路径
string path="";
path=System.AppContext.BaseDirectory;
祝你好运
如果你想要exe路径,你可以使用System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
这对我有用:
var currentDir = Directory.GetCurrentDirectory().Substring(0, Directory.GetCurrentDirectory().LastIndexOf("bin"));