it-swarm.com.de

Path.Combine absolut mit relativen Pfadzeichenfolgen

Ich versuche, mit Path.Combine einen Windows-Pfad mit einem relativen Pfad zu verknüpfen.

Path.Combine(@"C:\blah",@"..\bling") gibt jedoch C:\blah\..\bling Anstelle von C:\bling\ Zurück.

Weiß jemand, wie man dies erreicht, ohne meinen eigenen relativen Pfadauflöser zu schreiben (der nicht zu schwer sein sollte)?

83
CVertex

Was funktioniert:

string relativePath = "..\\bling.txt";
string baseDirectory = "C:\\blah\\";
string absolutePath = Path.GetFullPath(baseDirectory + relativePath);

(Ergebnis: absolutePath = "C:\bling.txt")

Was nicht funktioniert

string relativePath = "..\\bling.txt";
Uri baseAbsoluteUri = new Uri("C:\\blah\\");
string absolutePath = new Uri(baseAbsoluteUri, relativePath).AbsolutePath;

(Ergebnis: absolutePath = "C: /blah/bling.txt")

58
Llyle

Rufen Sie Path.GetFullPath auf dem kombinierten Pfad auf http://msdn.Microsoft.com/en-us/library/system.io.path.getfullpath.aspx

> Path.GetFullPath(Path.Combine(@"C:\blah\",@"..\bling"))
C:\bling

(Ich stimme Path.Combine sollte dies von selbst tun)

29
Colonel Panic

Path.GetFullPath(@"c:\windows\temp\..\system32")?
15
shahkalpesh

Dadurch erhalten Sie genau das, was Sie benötigen (Pfad muss NICHT vorhanden sein, damit dies funktioniert)

DirectoryInfo di = new DirectoryInfo(@"C:\blah\..\bling");
string cleanPath = di.FullName;
3

Für Windows Universal Apps Path.GetFullPath() ist nicht verfügbar, Sie können die System.Uri Klasse stattdessen:

 Uri uri = new Uri(Path.Combine(@"C:\blah\",@"..\bling"));
 Console.WriteLine(uri.LocalPath);
3
thumbmunkeys