2010-01-27 37 views
36

我正在尋找類似於Path.Combine的方法,它可以幫助我正確組合絕對路徑和相對路徑。例如,我想Path.Combine和點符號

Path.Combine(@"c:\alpha\beta", @"..\gamma"); 

產生c:\alpha\gamma,而不是作爲c:\alpha\..\gammaPath.Combine。有沒有簡單的方法來完成這一點?不用說,我也想要.路徑或多個..路徑(例如,..\..\)正常工作。

回答

54

使用Path.GetFullPath

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
Console.WriteLine(Path.GetFullPath(path)); 

DirectoryInfo類:

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
DirectoryInfo info = new DirectoryInfo(path); 
Console.WriteLine(info.FullName); 

雙方將輸出:

c:\alpha\gamma 
+3

咦,甚至不知道'GetFullPath'存在。性感。 – Nick 2010-01-27 18:34:31

7

你可以做一個Path.Combine,後面跟着一個Path.GetFullPath。

6

你可以使用2個電話,像這樣的組合:

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
string result = Path.GetFullPath(path); 

而這應該會給你你正在尋找的結果。

3

您可以撥打Path.GetFullPath來解決此問題。

例如,下面的代碼:

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
Console.WriteLine(path); 
path = Path.GetFullPath(path); 
Console.WriteLine(path); 

會打印:

c:\alpha\beta\..\gamma 
c:\alpha\gamma 
0

但似乎GetFullPath並不總是正確的 嘗試:

Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\shareb\folderb")); 
    Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\..\shareb\folderb")); 

它們輸出相同的結果,似乎你不能將它移動到不同的份額 該c orrect答案,第二個應該是

\\ machineA的\ shareb \ FolderB中

但它給

\\ machineA的\ sharea \ shareb \ FolderB中

兩個