相对路径到C#中的绝对路径?


85

我有xml文件,其中包含图像的href文件路径(例如“ .... \ images \ image.jpg”)。href包含相对路径。现在,我需要将href提取到图像,并将它们转换为文件系统中的绝对路径。

我知道GetFullPath方法,但是我尝试了它,它似乎只能在CurrentDirectory集合(似乎是C)中起作用,所以我看不到如何使用它。而且,我仍然拥有包含href的文件的绝对路径以及href的相对路径,所以对我来说,根据的绝对路径计算“ ....”部分的数量对我来说是一项简单的任务包含文件,似乎也必须有一种方法以编程方式执行此操作。

我希望有一些我不知道的简单方法!有任何想法吗?


2
这是桌面应用程序还是Web应用程序?
克里斯·库肯

Answers:


104

假设您知道XML文件的真实目录使用Path.Combine,例如

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

如果您想恢复所有..折叠的完整路径,则可以使用:

Path.GetFullPath((new Uri(absolute_path)).LocalPath);

1
谢谢,我的问题显然是我忘记了先获取xml文件的目录,我尝试了Combine,但是使用了文件的绝对路径,但这不起作用。我不知道所有这些答案中的哪一个是最先出现的,时间显示相同,但​​是您指出要获取目录,所以我选择了您的答案。谢谢大家!
Anders

10
随着实验的一点点,似乎(new Uri(absolute_path)).LocalPath做同样的事情,Path.GetFullPath(absolute_path)所以一个或另一个应该足够了。
蒂姆·刘易斯

1
请注意,Uri对“#”或“&”进行了特殊处理,在处理路径和文件名时您并不需要!
MatsW

1
@MatsW:docs.microsoft.com/zh-cn/dotnet/api/system.uri.localpath指出,Gets a local operating-system representation of a file name.因此在这种情况下,不需要进行任何特殊处理。
FrankM

142
string exactPath = Path.GetFullPath(yourRelativePath);

作品


14
这是“如何将相对路径转换为绝对路径”这一问题的正确答案?OP只是想知道答案“您如何将各个路径坚持在一起?”
JonnyRaa 2015年

2
起初我以为这没用,但确实可以。如果您输入C:\ test \ A \ .. \ B \ test.txt的相对路径,则输出将为C:\ test \ B \ test.txt
BraveNewMath

34

这工作了。

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

9

将相对路径转换为绝对路径的最佳方法!

string absolutePath = System.IO.Path.GetFullPath(relativePath);

5

您可以将Path.Combine与“基本”路径一起使用,然后将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

5

您尝试过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\Reports\59\44A0446_59-1.jpg

1

这对我有用。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.