Path.GetFullPath(".")与Directory.GetCurrentDirectory()的区别是什么?
Path.GetFullPath(".") 与 Directory.GetCurrentDirectory() 的区别
你看到的调试结果一致只是场景巧合,这两个API并非只是使用偏好差异,核心区别如下:
定位与语义不同
Directory.GetCurrentDirectory():专门用于获取进程的当前工作目录——这是操作系统为当前进程维护的一个全局目录属性,你可以通过Directory.SetCurrentDirectory()随时修改它,后续调用该方法会返回更新后的路径。Path.GetFullPath("."):本质是相对路径解析操作,它把传入的相对路径(这里的.代表"当前目录")转换为绝对路径,解析时依赖的是进程当前工作目录,但它的能力不止于此——你可以传入任意相对路径(比如"../bin"),它都会解析出对应的绝对路径。
功能范围不同
Directory.GetCurrentDirectory()只能返回当前工作目录的绝对路径,没有路径解析的额外能力。Path.GetFullPath()支持解析更复杂的路径,比如包含环境变量的路径:
这种场景下// 会解析为用户目录的绝对路径 var userPath = Path.GetFullPath("%USERPROFILE%");Directory.GetCurrentDirectory()完全无法处理。
特殊场景下的行为差异
假设你在程序中修改了当前工作目录:// 修改当前工作目录到上级目录 Directory.SetCurrentDirectory(".."); Console.WriteLine(Directory.GetCurrentDirectory()); // 返回上级目录路径 Console.WriteLine(Path.GetFullPath(".")); // 同样返回上级目录路径 // 但Path.GetFullPath可以继续解析其他相对路径 Console.WriteLine(Path.GetFullPath("bin/Debug")); // 返回上级目录下的bin/Debug绝对路径这里能看出,
Path.GetFullPath是路径工具方法,而Directory.GetCurrentDirectory是进程目录状态的查询方法。
总结:如果只是想获取当前进程的工作目录,Directory.GetCurrentDirectory()语义更清晰;如果需要解析相对路径到绝对路径,Path.GetFullPath()是正确选择。
内容的提问来源于stack exchange,提问作者DarkChocoBar
相关产品推荐
相关产品推荐

