Получить имя файла потока из XmlTextReader - PullRequest
1 голос
/ 06 апреля 2011

Это несколько тривиально, но здесь идет.Я передаю объект XmlTextReader методу, использующему .Net 4.0 framework.

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);
}

Ответы [ 3 ]

3 голосов
/ 06 апреля 2011

Как насчет этого?

reader.BaseUri

Это должно вернуть исходный Uri, использованный при создании вашего объекта XmlTextReader.

Поскольку MSDN заявляет:

Базовый URI сообщает вам, откуда пришли эти узлы.Если для возвращаемых узлов нет базового URI (например, они были проанализированы из строки в памяти), возвращается String.Empty.

0 голосов
/ 06 апреля 2011

XmlTextReader - это одноразовый объект, почему бы не изменить сигнатуру метода, чтобы он принимал путь к файлу, а затем вы можете прочитать его в потоке через XmlTextReader.Это позволит вам аккуратно избавиться от ридера, если появятся какие-либо ошибки, и одновременно зарегистрировать его

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

   }
}
catch(Exception e)
{
  //Log here
}
0 голосов
/ 06 апреля 2011

Может быть, вы могли бы использовать

XmlTextReader.LineNumber
XmlTextReader.LinePosition
...