Ich versuche, einen Windows-Pfad mit einem relativen Pfad zu verknüpfen Path.Combine
.
Allerdings Path.Combine(@"C:\blah",@"..\bling")
gibt C:\blah\..\bling
statt C:\bling\
.
Weiß jemand, wie man dies erreicht, ohne meinen eigenen relativen Pfadauflöser zu schreiben (was nicht zu schwer sein sollte)?
Antworten:
Was funktioniert:
(Ergebnis: absolutePath = "C: \ bling.txt")
Was funktioniert nicht?
(Ergebnis: absolutePath = "C: /blah/bling.txt")
quelle
C:\\blah..\\bling.txt
und das funktioniert nicht. In diesem Fall können Sie sie manuell zur Zeichenfolge hinzufügen oder tunPath.GetFullPath(Path.Combine(baseDirectory, relativePath))
C:\bling.txt
?Rufen Sie Path.GetFullPath auf dem kombinierten Pfad http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx auf
(Ich bin damit einverstanden, dass Path.Combine dies selbst tun sollte)
quelle
Path.GetFullPath(Path.Combine(@"..\..\blah",@"\bling"))
quelle
c:\windows\system32
Für Windows Universal Apps
Path.GetFullPath()
ist nicht verfügbar, Sie könnenSystem.Uri
stattdessen die Klasse verwenden:quelle
Dadurch erhalten Sie genau das, was Sie benötigen (der Pfad muss NICHT vorhanden sein, damit dies funktioniert).
quelle
Sei vorsichtig mit Backslashes, vergiss sie nicht (weder zweimal verwenden :)
quelle
Path.GetFullPath()
funktioniert nicht mit relativen Pfaden.Hier ist die Lösung, die sowohl mit relativen als auch mit absoluten Pfaden funktioniert. Es funktioniert sowohl unter Linux als auch unter Windows und behält das
..
erwartete am Anfang des Textes bei (im Ruhezustand werden sie normalisiert). Die Lösung ist immer noch darauf angewiesenPath.GetFullPath
, die Korrektur mit einer kleinen Problemumgehung durchzuführen.Es ist eine Erweiterungsmethode, also benutze sie wie
text.Canonicalize()
quelle