2010-06-29 173 views

回答

11

如果你看一下Path類有兩個方法,這應有助於:

Path.Combine 

Path.GetFullPath 

所以:

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

雖然第二步ISN絕對不需要 - 如果你打印出來的話,它會給你一條「更乾淨」的道路。

+0

不錯! 'Path.GetFullPath(Path.Combine(basepath,relative))'返回我需要的。 – 2010-06-29 10:16:04

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"

+1

「...返回\ foo \ bar,而不是像C:\ foo \ bar那樣」 - 我不知道你爲什麼這麼想,因爲文檔明確指出「如果path2包含絕對路徑,則此方法返回path2 「。 – Joe 2013-05-23 15:11:19

+0

\ foo \ bar在Windows上不是絕對的缺少驅動器盤符是絕對的 - C:\ foo \ bar是它^^ – kux 2013-05-23 19:26:08

+0

「預計」我的意思是「魔法預計的方法」^^ – kux 2013-05-23 19:34:14

相關問題