2010-01-27 9 views
36

Ich bin auf der Suche nach etwas ähnlich wie Path.Combine Methode, die mir helfen wird, absolut und relative Pfade richtig zu kombinieren. Zum Beispiel möchte ichPath.Combine und die Punktnotation

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

c:\alpha\gamma statt c:\alpha\..\gamma als Path.Combine tut zu erhalten. Gibt es einen einfachen Weg, dies zu erreichen? Unnötig zu sagen, ich möchte auch die Periode . Pfad oder mehrere .. Pfade (z. B. ..\..\) korrekt arbeiten.

Antwort

54

Verwenden Path.GetFullPath

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

oder die DirectoryInfo Klasse:

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

Beide werden Ausgang:

c:\alpha\gamma 
+3

Huh, wusste nicht einmal, dass 'GetFullPath' existierte. Sexy. – Nick

7

Sie können wahrscheinlich eine Path.Combine gefolgt von einem Path.GetFullPath ausführen.

6

Sie eine Kombination aus zwei Anrufe wie so verwenden könnte:

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

Und das sollte Ihnen die Ergebnisse geben, die Sie suchen.

3

Sie können Path.GetFullPath aufrufen, um dies zu beheben.

Zum Beispiel dieser Code:

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

Wird drucken:

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

Aber es scheint GetFullPath ist nicht immer richtig Versuchen:

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

Sie geben das gleiche Ergebnis scheint, Sie können es nicht verschieben, um zu einem anderen Anteil zu gehen Die c ie ordnungsgemäße Antwort für die zweite sollte

sein \\ MachineA \ shareb \ FolderB

aber es gibt

\\ MachineA \ share \ shareb \ FolderB

für beide

Verwandte Themen