2

我需要从相对路径中获取绝对路径,但是使用一个文件夹而不是执行程序集的位置来解析".""..". Path.GetFullPath不提供这样的过载。

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

..\MyOtherFolder\foo.bar

执行程序集的文件夹是:

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

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

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

有谁知道这是否内置在任何地方的 .NET 框架中?如果没有,我打算制作一个 Utility 方法,但我想我会先检查一下(特别是因为没有静态扩展方法......)。

编辑:

Path.Combine不管用。这个方法本质上所做的就是连接两个字符串。

4

5 回答 5

7

你有没有尝试过

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

这应该够了吧。

于 2012-12-10T21:32:26.763 回答
5
public string FullPathRelativeTo(string root, string partialPath)
{
    string oldRoot = Directory.GetCurrentDirectory();
    try {
        Directory.SetCurrentDirectory(root);
        return Path.GetFullPath(partialPath);
    }
    finally {
        Directory.SetCurrentDirectory(oldRoot);
    }
}
于 2012-12-10T21:55:30.077 回答
4

如果您目前在c:\test并且想要在c:\MyOtherFolder\foo.bar不知道自己c:\test想要做的情况下获得;

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

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

于 2012-12-10T21:39:41.353 回答
3

你可以做

new DirectoryInfo( @"..\MyOtherFolder\foo.bar" ).FullName
于 2014-01-25T00:47:11.310 回答
2

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

于 2012-12-10T21:31:41.827 回答