这有点微不足道,但这里有。我将XmlTextReader对象传递给使用.Net 4.0框架的方法。
public void TestMethod(XmlTextReader reader)
{
try
{
//...
//Logic
//...
}
catch(Exception ex)
{
//I also want to log the file location of the XmlTextReader!
Log(ex.Message);
}
}
如果读者遇到问题我想记录XmlTextReader正在读取的文件的位置。有没有一种简单的方法可以回到XmlTextReader正在使用的流?它有点微不足道的原因是我可以轻松地将一个额外的字符串传递给包含用于创建流的文件位置的方法,但它似乎只是一种只使用XmlTextReader的方式。
谢谢!
更新,这实际上就是我正在做的...抱歉这个坏榜样:
public void TestMethod(XmlTextReader reader)
{
//...
//Logic
//...
if(something_inside_the_XML)
throw new Exception(FileLocation);
}
答案 0 :(得分:3)
这个怎么样?
reader.BaseUri
这应该返回创建XmlTextReader时使用的原始Uri 对象
正如MSDN所述:
基URI告诉您这些节点的来源。如果没有返回节点的基URI(例如,它们是从内存中的字符串中解析的),则返回String.Empty。
答案 1 :(得分:0)
也许你可以使用
XmlTextReader.LineNumber
XmlTextReader.LinePosition
答案 2 :(得分:0)
XmlTextReader是一次性对象,为什么不更改方法签名以使其接受文件路径,然后您可以通过XmlTextReader流读取它。这将使您在任何错误的情况下干净地处理读取器并同时记录
try
{
using(var reader = new XmlTextReader(filepath)
{
}
}
catch(Exception e)
{
//Log here
}