使用C#Console Application获取应用程序目录?

时间:2012-10-13 16:04:01

标签: c# console directory

我在谷歌上发现了一些内容,但它不适用于C#控制台应用程序

我找到了什么:

string appPath = Path.GetDirectoryName(Application.ExecutablePath);

如何使用c#控制台应用程序获取应用程序目录?

5 个答案:

答案 0 :(得分:13)

应用程序不适用于控制台应用程序,它适用于Windows窗体。

要获取工作目录,您可以使用

Environment.CurrentDirectory

另外,要获取可执行文件的目录,可以使用:

AppDomain.CurrentDomain.BaseDirectory

答案 1 :(得分:9)

如果您仍想在控制台应用程序中使用Application.ExecutablePath,则需要:

  1. 添加对System.Windows.Forms命名空间的引用
  2. 将System.Windows.Forms添加到您的使用部分

    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);
            }
        }
    }
    
  3. 此外,您可以使用Directory.GetCurrentDirectory()代替Path.GetDirectoryName(Application.ExecutablePath),因此您不需要对System.Windows.Forms的引用。

    如果您不想同时包含System.IOSystem.Windows.Forms名称空间,那么您应该遵循Reimeus的回答。

答案 2 :(得分:7)

注意,路径有几种方法和PITFALLS。

  • 你在哪个位置?工作目录,.EXE目录,DLLs目录?

  • 您是否希望代码也适用于服务或控制台应用程序?

  • 如果目录的尾部斜杠不一致,您的代码是否会中断?

让我们看看一些选项:

Application.ExecutablePath

需要添加引用并加载Application命名空间。

Directory.GetCurrentDirectory
Environment.CurrentDirectory

如果程序是由快捷方式,注册表,任务管理器运行的,那么这些将给出“开始”和“快速启动”。文件夹,可以与.EXE位置不同。

AppDomain.CurrentDomain.BaseDirectory

取决于它的运行效果是否包含尾部斜杠。这可能会破坏事物,例如GetDirectoryName()认为没有斜杠是文件,并将删除最后一部分。

这些都是我的建议,在Form和Console应用程序中工作:

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目录,第二个返回DLLs目录。

答案 3 :(得分:3)

答案 4 :(得分:0)

我知道已经很长时间了,但是Assembly.GetExecutingAssembly().CodeBase为我工作。您只需要用它替换Application.ExecutablePath

当然您必须添加using System.Reflection;

我尝试使用System.Windows.Forms,但这给了我一个例外