C# 获取当前程序运行路径的方法集合

本文介绍了如何在 C# 中获取当前程序的运行路径,同时对比这些方法的差别。

获取方式

  1. 获取当前进程的完整路径,包含文件名(进程名)

    1
    2
    string str = this.GetType().Assembly.Location;
    result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
  2. 获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。

    1
    2
    string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
    result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
  3. 获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。

    1
    2
    string str = System.Environment.CurrentDirectory;
    result: X:\xxx\xxx (.exe文件所在的目录)
  4. 获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。

    1
    2
    string str = System.AppDomain.CurrentDomain.BaseDirectory;
    result: X:\xxx\xxx\ (.exe文件所在的目录+"\")
  5. 获取和设置包含该应用程序的目录的名称。(推荐)

    1
    2
    string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
    result: X:\xxx\xxx\ (.exe文件所在的目录+"\")
  6. 获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

    1
    2
    string str = System.Windows.Forms.Application.StartupPath;
    result: X:\xxx\xxx (.exe文件所在的目录)
  7. 获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。

    1
    2
    string str = System.Windows.Forms.Application.ExecutablePath;
    result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
  8. 获取应用程序的当前工作目录(不可靠)。

    1
    2
    string str = System.IO.Directory.GetCurrentDirectory();
    result: X:\xxx\xxx (.exe文件所在的目录)
  9. 包含应用程序的基目录的字符串,不包括尾部分隔符。这通常是启动程序集的目录。

    1
    AppContext.BaseDirectory
  10. 获取包含当前执行的程序集的文件的路径

    1
    Assembly.GetExecutingAssembly().Location

    这个方法也可以用于获取其他程序集的路径,只要你传入那个程序集的类型。

区别

  1. Directory.GetCurrentDirectory()Environment.CurrentDirectory 都返回当前工作目录的完全限定路径,它们通常是相同的。但是,Directory.GetCurrentDirectory() 返回的路径可能会因为工作目录的改变而改变,而 Environment.CurrentDirectory 只是获取当前工作目录的值,不会随着工作目录的改变而改变。
  2. AppContext.BaseDirectory 返回应用程序的基目录,这个目录通常是启动程序集的目录,不包括尾部分隔符。
  3. Assembly.GetExecutingAssembly().Location 获取包含当前执行的程序集的文件的路径,它通常是一个完整的文件路径。使用这个方法时,需要注意,当程序集是从网络上下载时,可能无法获取到它的位置。

总结

具体使用哪种方法获取当前路径取决于你的具体需求。一般来说,如果你需要获取应用程序的基目录,应该使用 AppContext.BaseDirectory;如果需要获取包含当前执行程序集的文件路径,应该使用 Assembly.GetExecutingAssembly().Location。如果需要获取当前工作目录的路径,可以使用 Directory.GetCurrentDirectory()Environment.CurrentDirectory