如何合并两条路径?

How to Combine Two paths?

我有一个 XmlTextReader 可以读取一系列 XML 文件以将一些信息加载到我的程序中。

但是,在某些 XML 文件中,我有图像的文件名,我想加载该图像。

但问题是 XML 文件没有图像的完整路径。

<Image id="ImageId" File="Image.bmp" /> 
<!-- full path is not available. Image is behind XML-->

这意味着图像存在于 xml 文件所在的位置。

出于某种原因,获取 XML 文件路径的唯一方法是获取读取当前 XML 文件的 XmlTextReader 的路径。

我做了一些研究,发现您可以从 XmlTextReader 检索 XML 路径,如下所示:

string path = reader.BaseURI; // this will get the path of reading XML
                              // reader is XmlTextReader

如何将 path 与图像的路径结合起来?

我试过以下方法:

string FullImagePath = Path.Combine(reader.BaseURI, imagePath);

这些是变量的值:

图像的预期路径为:D:/.../Image.bmp,与 currentXml.xml.

在同一目录中

那么如何获取图片文件的路径呢?

 Path.Combine(Path.DirectoryName(reader.BaseUri), imagePath)

您有两个不同的问题需要分别解决。

根据用于使用图像文件的 API,可能支持也可能不支持 file:// URI 路径。因此,您希望将其设为本地路径,如 Convert file path to a file URI?:

中所述
string xmlPath = "file://C:/Temp/Foo.xml";
var xmlUri = new Uri(xmlPath); // Throws if the path is not in a valid format.
string xmlLocalPath = xmlUri.LocalPath; // C:\Temp\Foo.xml

然后您要构建图像文件的路径,该文件位于与 XML 文件相同的目录中。

一种方法是获取该文件所在的目录,请参阅 Getting the folder name from a path:

string xmlDirectory = Path.GetDirectoryName(xmlLocalPath); // C:\Temp

然后您可以添加图片的文件名:

string imagePath = Path.Combine(xmlDirectory, "image.png"); // C:\Temp\image.png

或者,在 "one" 行中:

string imagePath = Path.Combine(Path.GetDirectoryName(new Uri(reader.BaseURI).LocalPath), 
                                ImagePath);

当您处理解析 URL 时,我建议在 System.Xml:

中使用 XmlUrlResolver
string localPath = new XmlUrlResolver().ResolveUri(new Uri(baseUri), imageName).LocalPath;