string basepath = @"C:\somefolder\subfolder\bin"; // is defined in runtime
string relative = @"..\..\templates";
string absolute = Magic(basepath, relative); // should be "C:\somefolder\templates"
你能用Magic
方法帮助我吗?希望代码不会太复杂。
.NET Framework中是否有“Magic
”方法?
答案 0 :(得分:12)
如果你看一下Path
课程,有几种方法可以提供帮助:
Path.Combine
和
Path.GetFullPath
所以:
string newPath = Path.Combine(basepath, relative);
string absolute = Path.GetFullPath(newPath);
虽然第二步并非严格要求 - 如果你打印出来,它会为你提供一条“清洁”的道路。
答案 1 :(得分: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"