ChatGPT解决这个技术问题 Extra ChatGPT

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

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

我知道 GetFullPath 方法,但我试过了,它似乎只适用于 CurrentDirectory 集,它似乎是 C: 所以我不知道如何使用它。而且,我仍然有包含 href 的文件的绝对路径和 href 相对路径,所以因为对我来说,根据包含文件,似乎也必须有一种方法可以以编程方式执行此操作。

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

这是桌面应用程序还是网络应用程序?

c
cahit beyaz
string exactPath = Path.GetFullPath(yourRelativePath);

作品


这是“如何将相对路径转换为绝对路径”这个问题的正确答案? OP 只是想知道“你如何将一些小路坚持在一起?”的答案。
起初我认为这不起作用,但确实如此。如果您输入 C:\test\A\..\B\test.txt 的相对路径,则输出将为 C:\test\B\test.txt
P
Paolo

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

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

如果您想在任何..折叠的情况下恢复完整路径,那么您可以使用:

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

谢谢,我的问题显然是我忘记先获取xml文件的目录,我尝试过Combine,但是使用文件的绝对路径,这不起作用。我不知道所有这些答案中哪个是第一个,时间显示相同,但是您指出要获取目录,所以我选择了您的答案。不过谢谢大家!
通过一些实验,(new Uri(absolute_path)).LocalPath 似乎与 Path.GetFullPath(absolute_path) 做同样的事情,所以一个或另一个就足够了。
请注意,在处理路径和文件名时,Uri 对“#”或“&”有特殊处理!
@MatsW:docs.microsoft.com/en-us/dotnet/api/system.uri.localpath 声明 Gets a local operating-system representation of a file name. 所以在这种情况下,不需要特殊处理。
D
David Crowell

这行得通。

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

M
Mohammad Fathi MiMFa

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

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

R
Reed Copsey

您可以将 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

T
Tianzhen Lin

您是否尝试过 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

J
Jonny Boy

这对我有用。

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