C# 获取当前程序运行路径的方法集合
本文介绍了如何在 C# 中获取当前程序的运行路径,同时对比这些方法的差别。
获取方式
获取当前进程的完整路径,包含文件名(进程名)
1
2string str = this.GetType().Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。
1
2string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
1
2string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
1
2string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")获取和设置包含该应用程序的目录的名称。(推荐)
1
2string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
1
2string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
1
2string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)获取应用程序的当前工作目录(不可靠)。
1
2string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)包含应用程序的基目录的字符串,不包括尾部分隔符。这通常是启动程序集的目录。
1
AppContext.BaseDirectory
获取包含当前执行的程序集的文件的路径
1
Assembly.GetExecutingAssembly().Location
这个方法也可以用于获取其他程序集的路径,只要你传入那个程序集的类型。
区别
Directory.GetCurrentDirectory()
和Environment.CurrentDirectory
都返回当前工作目录的完全限定路径,它们通常是相同的。但是,Directory.GetCurrentDirectory()
返回的路径可能会因为工作目录的改变而改变,而Environment.CurrentDirectory
只是获取当前工作目录的值,不会随着工作目录的改变而改变。AppContext.BaseDirectory
返回应用程序的基目录,这个目录通常是启动程序集的目录,不包括尾部分隔符。Assembly.GetExecutingAssembly().Location
获取包含当前执行的程序集的文件的路径,它通常是一个完整的文件路径。使用这个方法时,需要注意,当程序集是从网络上下载时,可能无法获取到它的位置。
总结
具体使用哪种方法获取当前路径取决于你的具体需求。一般来说,如果你需要获取应用程序的基目录,应该使用
AppContext.BaseDirectory
;如果需要获取包含当前执行程序集的文件路径,应该使用
Assembly.GetExecutingAssembly().Location
。如果需要获取当前工作目录的路径,可以使用
Directory.GetCurrentDirectory()
或
Environment.CurrentDirectory
。