如何合并两条路径?
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);
这些是变量的值:
reader.BaseURI
是 "file:///D:/.../currentXml.xml"
imagePath
是 "Image.bmp"
.
- 最后,
FullImagePath
,赋值后Path.Combine
的结果是file:///D:/.../currentXml.xml\Image.bmp
,这不是我所期望的
图像的预期路径为: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;
我有一个 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);
这些是变量的值:
reader.BaseURI
是"file:///D:/.../currentXml.xml"
imagePath
是"Image.bmp"
.- 最后,
FullImagePath
,赋值后Path.Combine
的结果是file:///D:/.../currentXml.xml\Image.bmp
,这不是我所期望的
图像的预期路径为: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;