Относительный путь к абсолютному пути в C#?


У меня есть xml-файлы, которые содержат href-пути к изображениям (например,"....изображений изображения.формат JPG.)" Hrefs содержат относительные пути. Теперь мне нужно извлечь hrefs в изображения и превратить их в абсолютные пути в файловой системе.

Я знаю о методе GetFullPath, но я попробовал его, и он работает только из набора CurrentDirectory, который кажется C: поэтому я не вижу, как я мог бы использовать это. И еще, у меня есть абсолютный путь к файлу, содержащему hrefs, и слишком относительные пути, так как это простая задача для меня, чтобы посчитать количество ".... "части, основанные на абсолютном пути содержащего файла, похоже, что должен быть способ сделать это программно.

Я надеюсь, что есть простой способ я просто не знаю! Есть идеи?

7 63

7 ответов:

предполагая, что вы знаете реальный каталог XML-файл живет в пути использования.Комбинируйте, например

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

Если вы хотите вернуть полный путь с любой ..'s рухнул, то вы можете использовать:

Path.GetFullPath((new Uri(absolute_path)).LocalPath);
string exactPath = Path.GetFullPath(yourRelativePath);

работает

это сработало.

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

ты пробовал Server.MapPath метод. Вот пример

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\ReportsA0446_59-1.jpg

вы можете использовать путь.Объедините с" базовым " путем, затем GetFullPath по результатам.

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

это сработало для меня.

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