Relativer Pfad zum absoluten Pfad in C #?

83

Ich habe XML-Dateien, die href-Dateipfade zu Bildern enthalten (z. B. ".... \ images \ image.jpg"). Die hrefs enthalten relative Pfade. Jetzt muss ich die hrefs zu den Bildern extrahieren und sie in absolute Pfade im Dateisystem umwandeln.

Ich kenne die GetFullPath-Methode, habe sie aber ausprobiert und sie scheint nur aus dem CurrentDirectory-Set zu funktionieren, das C zu sein scheint. Ich sehe also nicht, wie ich das verwenden könnte. Und trotzdem habe ich den absoluten Pfad der Datei, die die hrefs enthält, und die relativen href-Pfade. Da es für mich eine einfache Aufgabe ist, die Anzahl der ".... \" - Teile basierend auf dem absoluten Pfad von zurückzuzählen In der enthaltenen Datei scheint es eine Möglichkeit zu geben, dies auch programmgesteuert zu tun.

Ich hoffe, es gibt eine einfache Methode, die ich einfach nicht kenne! Irgendwelche Ideen?

Anders
quelle
2
Ist das eine Desktop- oder Webanwendung?
Chris Kooken

Antworten:

104

Angenommen, Sie kennen das reale Verzeichnis, in dem sich die XML-Datei befindet. Path.Combine, z

var absolute_path = Path.Combine(directoryXmlLivesIn, "..\images\image.jpg");

Wenn Sie den vollständigen Pfad mit einem zusammengebrochenen Pfad wiederherstellen möchten, können Sie Folgendes verwenden:

Path.GetFullPath((new Uri(absolute_path)).LocalPath);
Paolo
quelle
1
Danke, mein Problem war anscheinend, dass ich vergessen hatte, zuerst das Verzeichnis der XML-Datei abzurufen, ich hatte Combine ausprobiert, aber mit dem absoluten Pfad der Datei, was nicht funktionierte. Ich weiß nicht, welche dieser Antworten zuerst war, die Zeit zeigt die gleiche, aber Sie haben darauf hingewiesen, das Verzeichnis zu erhalten, also habe ich Ihre Antwort gewählt. Vielen Dank an alle!
Anders
10
Mit ein wenig Experimentieren scheint (new Uri(absolute_path)).LocalPathes Path.GetFullPath(absolute_path)so zu sein , als würde das eine oder andere ausreichen.
Tim Lewis
1
Beachten Sie, dass Uri eine spezielle Behandlung von "#" oder "&" hat, die Sie beim Umgang mit Pfaden und Dateinamen nicht möchten!
MatsW
1
@MatsW: docs.microsoft.com/en-us/dotnet/api/system.uri.localpath gibt an, Gets a local operating-system representation of a file name.dass in diesem Fall keine besondere Behandlung zu erwarten ist.
FrankM
142
string exactPath = Path.GetFullPath(yourRelativePath);

funktioniert

cahit beyaz
quelle
14
Dies ist die richtige Antwort auf die Frage: Wie konvertiert man einen relativen Pfad in einen absoluten Pfad? Das OP wollte nur die Antwort auf die Frage wissen, wie man sich an Pfade hält.
JonnyRaa
2
Zuerst dachte ich, dass das nicht funktioniert, aber es funktioniert. Wenn Sie Ihren relativen Pfad von C: \ test \ A \ .. \ B \ test.txt eingeben, lautet die Ausgabe C: \ test \ B \ test.txt
BraveNewMath
33

Das hat funktioniert.

var s = Path.Combine(@"C:\some\location", @"..\other\file.txt");
s = Path.GetFullPath(s);
David Crowell
quelle
9

Dies ist der beste Weg, um den relativen Pfad in den absoluten Pfad umzuwandeln!

string absolutePath = System.IO.Path.GetFullPath(relativePath);
Mohammad Fathi MiMFa
quelle
6

Sie können Path.Combine mit dem Pfad "base" und dann GetFullPath für die Ergebnisse verwenden.

string absPathContainingHrefs = GetAbsolutePath(); // Get the "base" path
string fullPath = Path.Combine(absPathContainingHrefs, @"..\..\images\image.jpg");
fullPath = Path.GetFullPath(fullPath);  // Will turn the above into a proper abs path
Reed Copsey
quelle
6

Haben Sie Server.MapPathMethode ausprobiert . Hier ist ein Beispiel

string relative_path = "/Content/img/Upload/Reports/59/44A0446_59-1.jpg";
string absolute_path = Server.MapPath(relative_path);
//will be c:\users\.....\Content\img\Upload\Reports\59\44A0446_59-1.jpg
Tianzhen Lin
quelle
2

Das hat bei mir funktioniert.

//used in an ASP.NET MVC app
private const string BatchFilePath = "/MyBatchFileDirectory/Mybatchfiles.bat"; 
var batchFile = HttpContext.Current.Server.MapPath(BatchFilePath);
Jonny Boy
quelle