如何结合两条路径?

时间:2015-06-21 15:25:13

标签: c# xml path filenames

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

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

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

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

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

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

我做了一些研究,我发现你可以从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);

这些是变量的值:

  • reader.BaseURI"file:///D:/.../currentXml.xml"
  • imagePath"Image.bmp"
  • 最后,FullImagePath,在分配Path.Combine的结果后file:///D:/.../currentXml.xml\\Image.bmp,这不是我所期望的。

图片的预期路径为:D:/.../Image.bmp,与currentXml.xml位于同一目录中。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您有两个不同的问题需要单独解决。

根据用于使用映像文件的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

或者,在“一行”中:

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

答案 2 :(得分:0)

在您处理解析网址时,我建议您在XmlUrlResolver中使用System.Xml

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