相对路径转绝对路径,当前目录不同的情况下

3
我需要从一个相对路径获取绝对路径,但使用与程序集执行位置不同的文件夹来解析 "." 和 ".."。Path.GetFullPath没有提供这样的重载。例如,假设我有以下路径:..\MyOtherFolder\foo.bar 程序集执行的文件夹为:c:\users\me\desktop\source\myproj\bin\debug\,但实际上它可能位于任何位置。
我想将“当前”文件夹指定为 c:\test,以便“..”解析为“c:\”。有人知道.NET框架中是否内置了此功能吗?如果没有,我计划制作一个实用程序方法,但首先我想检查一下(特别是因为没有静态扩展方法……)。编辑:Path.Combine无法使用。该方法本质上只是将两个字符串连接起来。

5个回答

8
你尝试过吗?
Path.GetFullPath(Path.Combine(@"C:\test", @"..\MyOtherFolder\foo.bar"))

那应该就可以了。

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

4

如果你当前在c:\test目录下,想要获取c:\MyOtherFolder\foo.bar文件路径,但不知道自己在c:\test目录下,可以执行以下操作:

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

接下来,您可能希望将当前目录设置回先前的位置。


尽管更改当前目录并不是理想的(在实用方法中,不明显它不是线程安全的),但这对我的当前目的很有效。 - MgSam
这让我身体不舒服... :( - Mateen Ulhaq

3
您可以执行以下操作:
new DirectoryInfo( @"..\MyOtherFolder\foo.bar" ).FullName

2

1
我认为OP假设他不知道自己在c:\tests,他可能在任何地方,并且想要在给定相对路径的情况下获取完整路径,因此Path.Combine无法起作用。 - evanmcdonnal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接