8
string basepath = @"C:\somefolder\subfolder\bin"; // is defined in runtime
string relative = @"..\..\templates";

string absolute = Magic(basepath, relative); // should be "C:\somefolder\templates"

你能帮我Magic方法吗?希望代码不要太复杂。

Magic.NET Framework 中是否有“ ”方法?

4

2 回答 2

12

如果你看一下这个Path类,有几个方法应该会有所帮助:

Path.Combine

Path.GetFullPath

所以:

string newPath = Path.Combine(basepath, relative);
string absolute = Path.GetFullPath(newPath);

虽然第二步并不是绝对需要的——如果你打印出来,它会给你一个“更干净”的路径。

于 2010-06-29T09:44:48.077 回答
0

因为Path.Combine并非在所有情况下都有效,所以这里有一个更复杂的功能:-)

static string GetFullPath(string maybeRelativePath, string baseDirectory) {
    if (baseDirectory == null) baseDirectory = Environment.CurrentDirectory;
    var root = Path.GetPathRoot(maybeRelativePath);
    if (string.IsNullOrEmpty(root)) 
        return Path.GetFullPath(Path.Combine(baseDirectory, maybeRelativePath));
    if (root == "\\") 
        return Path.GetFullPath(Path.Combine(Path.GetPathRoot(baseDirectory), maybeRelativePath.Remove(0, 1)));
    return maybeRelativePath;
}

Path.Combine(@"C:\foo\",@"\foo\bar")返回@"\foo\bar"而不是预期@"C:\foo\bar"

于 2013-05-23T14:50:03.570 回答