2011-04-06 79 views
1

这虽然有些微不足道,但在这里。我将一个XmlTextReader对象传递给使用.Net 4.0框架的方法。从XmlTextReader中检索流文件名称

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

您应该使用'XmlReader'而不是'XmlTextReader'。使用'XmlReader.Create()'创建一个。 – 2011-04-06 14:16:36

回答

0

也许你可以使用

XmlTextReader.LineNumber 
XmlTextReader.LinePosition 
+0

不需要我想要文件名。 – JustBrowsing 2011-04-06 14:06:21

0

XmlTextReader的是一次性的对象,为什么不改方法签名,以便它接受文件路径,然后可以通过XmlTextReader进行流式读取。这将使你干净地处理读者,如果有任何错误,并在同一时间登录它

try 
{ 
    using(var reader = new XmlTextReader(filepath) 
    { 

    } 
} 
catch(Exception e) 
{ 
    //Log here 
} 
+0

看到我的更新:但是,这可能会奏效......:/ – JustBrowsing 2011-04-06 14:15:02

3

这个怎么样?

reader.BaseUri 

这将返回创建的XmlTextReader 对象时,原始的URI使用。

由于MSDN状态:

基URI告诉您这些节点是从哪里来的。如果没有返回节点的基本URI(例如,它们是从内存字符串中分析的),则返回String.Empty。