Mam pliki XML, które zawierają ścieżki do plików href do obrazów (np. „.... \ images \ image.jpg”). Href zawierają ścieżki względne. Teraz muszę wyodrębnić href do obrazów i przekształcić je w bezwzględne ścieżki w systemie plików.
Wiem o metodzie GetFullPath, ale wypróbowałem ją i wydaje się, że działa tylko z zestawu CurrentDirectory, który wydaje się być C: więc nie wiem, jak mógłbym to wykorzystać. Mimo to mam absolutną ścieżkę do pliku zawierającego hrefs i względne ścieżki href, więc ponieważ jest to dla mnie proste zadanie, mogę z powrotem policzyć liczbę ".... \" części na podstawie bezwzględnej ścieżki zawierający plik, wydaje się, że musi istnieć sposób na zrobienie tego również programowo.
Mam nadzieję, że istnieje prosta metoda, o której po prostu nie wiem! Jakieś pomysły?
źródło
Odpowiedzi:
Zakładając, że znasz rzeczywisty katalog, w którym znajduje się plik XML w użyciu Path.Combine, np
var absolute_path = Path.Combine(directoryXmlLivesIn, "..\images\image.jpg");
Jeśli chcesz odzyskać pełną ścieżkę ze zwiniętymi dowolnymi plikami .., możesz użyć:
Path.GetFullPath((new Uri(absolute_path)).LocalPath);
źródło
(new Uri(absolute_path)).LocalPath
robi to samo, coPath.GetFullPath(absolute_path)
powinno wystarczyć.Gets a local operating-system representation of a file name.
że w tym przypadku nie należy oczekiwać specjalnej obsługi.string exactPath = Path.GetFullPath(yourRelativePath);
Pracuje
źródło
To zadziałało.
var s = Path.Combine(@"C:\some\location", @"..\other\file.txt"); s = Path.GetFullPath(s);
źródło
To najlepszy sposób na przekonwertowanie ścieżki względnej na ścieżkę bezwzględną!
string absolutePath = System.IO.Path.GetFullPath(relativePath);
źródło
Możesz użyć Path.Combine ze ścieżką „podstawową”, a następnie GetFullPath na wynikach.
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
źródło
Czy próbowałeś
Server.MapPath
metody. Oto przykładstring 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
źródło
To zadziałało dla mnie.
//used in an ASP.NET MVC app private const string BatchFilePath = "/MyBatchFileDirectory/Mybatchfiles.bat"; var batchFile = HttpContext.Current.Server.MapPath(BatchFilePath);
źródło
Spójrz na
Path.Combine
http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspxźródło