Frage Path.Combine absolute mit relativen Pfadzeichenfolgen


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

Jedoch, Path.Combine(@"C:\blah",@"..\bling") kehrt zurück C:\blah\..\bling Anstatt von C:\bling\.

Kann jemand das erreichen, ohne meinen eigenen relativen Pfadresolver zu schreiben (was nicht zu schwer sein sollte)?


76
2018-03-22 04:50


Ursprung


Antworten:


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")


54
2017-08-19 11:33



Rufen Sie Path.GetFullPath für den 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 zu, Path.Combine sollte dies selbst tun)


22
2018-05-20 09:44




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


14
2018-03-22 05:09



Dadurch erhalten Sie genau das, was Sie brauchen (Pfad muss NICHT existieren, damit dies funktioniert)

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

3
2017-07-17 10:31



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

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

2
2018-05-31 20:13