常用的获取路径方法
以下是 C# 中获取当前目录 / 路径的几种主流方式,包含可直接运行的代码示例和详细解释:
1. 获取当前工作目录(可动态改变)
使用
Directory.GetCurrentDirectory() 或 Environment.CurrentDirectory,二者效果基本一致,获取的是程序的当前工作目录(默认是程序启动目录,但可通过代码修改)。using System; using System.IO;class Program {static void Main(){// 方法1:通过Directory类获取string workDir1 = Directory.GetCurrentDirectory();Console.WriteLine("当前工作目录(Directory):" + workDir1);// 方法2:通过Environment类获取string workDir2 = Environment.CurrentDirectory;Console.WriteLine("当前工作目录(Environment):" + workDir2);} }
2. 获取程序集所在目录(推荐,稳定)
使用
AppDomain.CurrentDomain.BaseDirectory 是最推荐的方式,它获取的是程序集(exe/dll)所在的目录,路径稳定,不受工作目录变动影响。using System;class Program {static void Main(){// 程序集所在目录(稳定,推荐)string assemblyDir = AppDomain.CurrentDomain.BaseDirectory;Console.WriteLine("程序集所在目录:" + assemblyDir);} }
3. 获取程序集完整路径(含文件名)
如果需要精准定位当前执行的程序集文件(比如获取
xxx.exe的完整路径),可使用Assembly.GetExecutingAssembly().Location(需引用System.Reflection)。using System; using System.IO; using System.Reflection;class Program {static void Main(){// 获取程序集完整路径(含exe/dll文件名)string fullPath = Assembly.GetExecutingAssembly().Location;Console.WriteLine("程序集完整路径:" + fullPath);// 仅提取目录(结合Path类)string onlyDir = Path.GetDirectoryName(fullPath);Console.WriteLine("程序集所在目录:" + onlyDir);} }
4. WinForm 程序专用
如果是 Windows Forms 应用,可使用
Application.StartupPath获取程序启动目录(不含可执行文件名),需引用System.Windows.Forms。using System; using System.Windows.Forms;class MainForm : Form {public MainForm(){string startupPath = Application.StartupPath;MessageBox.Show("WinForm启动路径:" + startupPath);} }
总结
- 优先选择
AppDomain.CurrentDomain.BaseDirectory,它路径稳定,适配绝大多数读取程序自带文件的场景。 Directory.GetCurrentDirectory()易被修改,仅适合临时获取工作目录,不建议作为资源文件读取路径。- 如需获取程序集文件的完整路径,使用
Assembly.GetExecutingAssembly().Location,并通过Path.GetDirectoryName()提取目录。