У меня есть XmlTextReader для чтения серии файлов XML для загрузки некоторой информации в мою программу.
Однако в некоторых файлах XML у меня есть имя файла изображения, и я хочу загрузить это изображение.
Но проблема в том, что XML-файл не имеет полного пути к изображению.
<Image id="ImageId" File="Image.bmp" />
<!-- full path is not available. Image is behind XML-->
Это означает, что изображение существует там, где существует файл xml.
по какой-то причине единственный способ получить путь к XML-файлу - это получить путь к XmlTextReader, читающему текущий XML-файл.
Я провел небольшое исследование и обнаружил, что вы можете получить путь XML из XmlTextReader, как показано ниже:
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
is"file:///D:/.../currentXml.xml"
imagePath
is"Image.bmp"
.- Наконец,
FullImagePath
после присвоения результатаPath.Combine
будетfile:///D:/.../currentXml.xml\\Image.bmp
, чего я не ожидал.
Ожидаемый путь к изображению: D:/.../Image.bmp
, в том же каталоге, что и currentXml.xml
.
Итак, как я могу получить путь к файлу изображения?
GetDirectoryName
выполнил свою работу. но чтобы избавиться отfile://
, я использовалSubstring(6)
. не красиво, но просто, 21.06.2015new Uri(Path.Combine(Path.GetDirectoryName(reader.BaseURI), ImagePath)).LocalPath
. теперь это не сломается когда-нибудь! 21.06.2015Path.GetDirectoryName()
не поддерживает пути с использованием file:, поэтому я сомневаюсь, что это сработает. Изменить: похоже, работает ... 21.06.2015string imagePath = Path.Combine(Path.GetDirectoryName(new Uri(reader.BaseURI).LocalPath), ImagePath);
. 21.06.2015