c# 获取当前路径

你希望在 C# 代码中获取程序运行时的当前目录路径,这是开发中非常常见的需求,不同的获取方式适用于不同场景,我会为你详细介绍几种常用方法并说明它们的核心区别。
 

常用的获取路径方法

 
以下是 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);
    }
}

 

 

总结

 
  1. 优先选择 AppDomain.CurrentDomain.BaseDirectory,它路径稳定,适配绝大多数读取程序自带文件的场景。
  2. Directory.GetCurrentDirectory() 易被修改,仅适合临时获取工作目录,不建议作为资源文件读取路径。
  3. 如需获取程序集文件的完整路径,使用 Assembly.GetExecutingAssembly().Location,并通过Path.GetDirectoryName()提取目录。
posted @ 2026-01-21 16:58  韩银剑  阅读(2)  评论(0)    收藏  举报