从XmlTextReader中提取文件名/路径

时间:2014-06-19 18:54:44

标签: c# xml

我有一个来自System.Xml命名空间的XmlTextReaders列表,如此

        List<XmlTextReader> test = new List<XmlTextReader>{};

然后添加元素就像这样

IEnumerable<string> Files = Directory.GetFiles(ConfigurationManager.AppSettings.Get("TestDirectory"));

if (Files.Count() == 0) //the check for existance and the catch aren't included in this snippet
    throw new DirectoryNotFoundException("The directory exists, however it is empty.");
foreach(var file in Files)
{
    test.Add(new XmlTextReader(file));
}

一旦我将此列表传递给另一个类,我有办法检索文件名/路径吗?

我已经搜索了MSDN类信息,据我所知,没有任何类型,但我希望我错过了它。

如果不可能,我将传递文件而不是XmlTextReaders,以便维护路径并稍后将它们打开。但我希望有一个XmlTextReader的属性/方法,我只是误解,它会给我文件名或路径(我甚至不需要整个路径,只需要名称。)

Here is the MSDN article on the XmlTextReader class.

2 个答案:

答案 0 :(得分:1)

你不能直接。

XmlTextReader类甚至不存储URL本身。它实例化一个名为XmlTextREaderImpl的内部类,它确实存储了URL,但它没有通过任何属性公开,甚至impl类本身也没有公开。

但是,您可以创建自己的包装器。创建一个扩展XmlTextReader的新类,接受url作为其构造函数参数,存储它,将其公开为属性,并将其他所有内容委托给内部XmlTextReader

如果你有ReSharper,使用ReSharper&#34;生成委派会员&#34;更容易编写这样的课程。特征

答案 1 :(得分:1)

使用与您所拥有的代码类似的另一种解决方案:

    Dictionary<XmlTextReader, string> test = new Dictionary<XmlTextReader, string>{};

然后添加元素就像这样

IEnumerable<string> Files = Directory.GetFiles(ConfigurationManager.AppSettings.Get("TestDirectory"));

if (Files.Count() == 0) //the check for existence and the catch aren't included in this snippet
    throw new DirectoryNotFoundException("The directory exists, however it is empty.");
foreach(var file in Files)
{
    test.Add(new XmlTextReader(file), file);
}

然后,您可以迭代test Dictionary或通过XmlTextReader键找到文件名。