2011-04-06 108 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。