我想创建一个转换文件的程序。我希望用户能够将可执行文件放在任何目录中,并在执行该程序时(双击.exe)我希望程序处理当前文件夹中exe的所有文件文件存在。程序如何确定当前执行的路径?
我试过System.Windows.Forms.Application.StartupPath
,但这似乎是错误的方式。
有什么想法吗?
答案 0 :(得分:287)
你应该不使用Directory.GetCurrentDirectory()
,因为当前目录可能与执行文件夹不同,尤其是当您通过快捷方式执行程序时。
最好将Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
用于您的目的。这将返回当前正在执行的程序集所在的路径名。
虽然我建议的方法允许您区分正在执行的程序集,条目程序集或任何其他已加载的程序集,如SonerGönül在其答案中所述,
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
也可能就足够了。这将等于
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
答案 1 :(得分:106)
System.AppDomain.CurrentDomain.BaseDirectory
这将为您提供应用程序的运行目录。这甚至适用于Web应用程序。之后,您可以访问您的文件。
答案 2 :(得分:29)
我使用以下代码创建了一个简单的控制台应用程序:
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
...至少演示一些不同方法之间的区别。
答案 3 :(得分:23)
答案 4 :(得分:20)
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
返回指定路径字符串的目录信息。
获取启动应用程序的可执行文件的路径, 包括可执行文件名。
答案 5 :(得分:19)
使用此,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
你也可以使用它。
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
答案 6 :(得分:6)
1
Directory.GetCurrentDirectory();
2
Thread.GetDomain().BaseDirectory
3
Environment.CurrentDirectory
答案 7 :(得分:5)
对于 .NET CORE ,请使用System.AppContext.BaseDirectory
(代替AppDomain.CurrentDomain.BaseDirectory
)
答案 8 :(得分:0)
使用Application.StartupPath
获得最佳效果imo。
答案 9 :(得分:0)
如果需要exe路径,则可以使用System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly()。Location);
答案 10 :(得分:0)
这对我来说最有效,尤其是在使用dotnet core单个文件发布时。
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
。
答案 11 :(得分:0)
此代码块以字符串类型创建应用目录的路径
string path="";
path=System.AppContext.BaseDirectory;
祝你好运