使用C#控制台应用程序获取应用程序目录?
我在谷歌上找到了一些东西,但它在C#控制台应用程序上不起作用 我发现:使用C#控制台应用程序获取应用程序目录?,c#,console,directory,C#,Console,Directory,我在谷歌上找到了一些东西,但它在C#控制台应用程序上不起作用 我发现: string appPath = Path.GetDirectoryName(Application.ExecutablePath); 如何使用c#控制台应用程序获取应用程序目录?试试看控制台应用程序无法使用该应用程序,它是针对windows窗体的 要获取工作目录,可以使用 Environment.CurrentDirectory 此外,要获取可执行文件的目录,您可以使用: AppDomain.CurrentDomain
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
如何使用c#控制台应用程序获取应用程序目录?试试看控制台应用程序无法使用该应用程序,它是针对windows窗体的 要获取工作目录,可以使用
Environment.CurrentDirectory
此外,要获取可执行文件的目录,您可以使用:
AppDomain.CurrentDomain.BaseDirectory
如果仍要在控制台应用程序中使用Application.ExecutablePath,则需要:
using System;
using System.IO;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string appDirectory = Path.GetDirectoryName(Application.ExecutablePath);
Console.WriteLine(appDirectory);
}
}
}
Path.GetDirectoryName(Application.ExecutablePath)
,因此您不需要对System.Windows.Forms的引用
如果您既不想包含
System.IO
也不想包含System.Windows.Forms
名称空间,那么您应该遵循Reimeus的答案。注意,路径有几种方法和陷阱
- 你在找什么地方?工作目录,.EXE目录,DLL目录
- 您希望代码也在服务或控制台应用程序中工作吗
- 如果目录的尾部斜杠不一致,代码是否会中断
Application.ExecutablePath
需要添加引用并加载应用程序命名空间
Directory.GetCurrentDirectory
Environment.CurrentDirectory
如果程序是通过快捷方式、注册表、任务管理器运行的,则这些将提供“开始位置”文件夹,该文件夹可能与.EXE位置不同
AppDomain.CurrentDomain.BaseDirectory
取决于它的运行效果,它是否包含尾部斜杠。这可能会破坏一些东西,例如GetDirectoryName()认为没有斜杠是文件,并将删除最后一部分
我的建议是,在表单和控制台应用程序中都可以使用这两种方法:
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
or
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
在主程序中使用时,两者都是相同的。如果在DLL中使用,第一个返回加载DLL的.EXE目录,第二个返回DLL目录。我知道这已经很长时间了,但是
Assembly.GetExecutingAssembly().CodeBase
对我有效。您只需用它替换应用程序.ExecutablePath
当然,您必须使用System.Reflection添加代码>
我尝试过使用System.Windows.Forms
,但它给了我一个异常-1AppDomain.CurrentDomain.BaseDirectory可能有一个斜杠,也可能没有,这取决于应用程序的启动方式
如何处理路径。合并
?你以前没听说过吗?@Kilanny为什么投反对票?是的路径。联合收割机负责斜线,但如果您不连接路径怎么办?例如,将目录传递给命令行程序,其中斜杠可以更改行为。让Path.combined
放在一边,为什么不像在Assembly.Location
上那样调用Path.GetDirectoryName
到BaseDIrectory
?@或者为迟来的答复感到抱歉。由于尾部斜杠不一致,GetDirectoryName()可能会将BaseDirectory视为文件路径,从而导致它删除路径的最后一部分。我已经更新了我的答案以使其更清晰。-1因为目录。GetCurrentDirectory()
获取当前工作目录,而不是包含应用程序的目录。@Sam但我还是喜欢这样。我不想依赖表单。-1,因为Directory.GetCurrentDirectory()
获取当前工作目录,而不是包含应用程序的目录。