具有不同当前文件夹的相对路径的绝对路径

时间:2012-12-10 21:29:25

标签: c# .net path

我需要从相对路径获取绝对路径,但是使用除执行程序集之外的文件夹来解析"."".."Path.GetFullPath没有提供这样的超载。

例如,假设我有以下路径:

..\MyOtherFolder\foo.bar

程序集正在执行的文件夹是:

c:\users\me\desktop\source\myproj\bin\debug\

但实际上它可能位于任何地方。

我想将“当前”文件夹指定为c:\test,以便".."解析为"c:\"

有谁知道这是否内置于.NET框架中?如果没有,我打算制作一个实用工具方法,但我想我先检查一下(特别是因为没有静态扩展方法......)。

编辑:

Path.Combine无效。所有这个方法基本上都是连接两个字符串。

5 个答案:

答案 0 :(得分:7)

你试过吗

Path.GetFullPath(Path.Combine(@"C:\test", @"..\MyOtherFolder\foo.bar"))

这应该可以解决问题。

答案 1 :(得分:5)

public string FullPathRelativeTo(string root, string partialPath)
{
    string oldRoot = Directory.GetCurrentDirectory();
    try {
        Directory.SetCurrentDirectory(root);
        return Path.GetFullPath(partialPath);
    }
    finally {
        Directory.SetCurrentDirectory(oldRoot);
    }
}

答案 2 :(得分:4)

如果您目前在c:\test,并且想要c:\MyOtherFolder\foo.bar而不知道自己在c:\test,那么

}

 Environment.CurrentDirectory = @"..\MyOtherFolder"; //navigation accepts relative path
 string fullPath = Directory.GetCurrentDirectory(); // returns full path

之后,您可能希望将当前目录设置回以前的位置。

答案 3 :(得分:3)

你可以做到

new DirectoryInfo( @"..\MyOtherFolder\foo.bar" ).FullName

答案 4 :(得分:2)

尝试使用Path.Combine(...)方法,它必须帮助您实现您想要的......