使用XmlTextReader循环遍历目录中的xml文件时出错

时间:2012-04-17 14:41:11

标签: c# loops xmlreader

我使用以下代码遍历一个目录,查找xml文件并在其中读取它们:

XmlReader reader = null;

foreach (string file in files)
{
   try
   {
     System.IO.FileInfo fi = new System.IO.FileInfo(file);

     string fext = fi.Extension;
     if (fext == ".xml")
     {
         Console.WriteLine("Processing file:" + fi.Name);
         reader = XmlReader.Create(fi.Name);
       **//BUT THIS WORKS---> reader = new XmlReader(@"\\10.00.100.11   \Data\Cognos\ReportOutput\Test\Risk Rating Exception Detail (LN-133-D)-en-us_2012-04-14T031017814Z-pdf_desc.xml");**

          while (reader.Read())
          {
              switch (reader.NodeType)
              {
                 case XmlNodeType.Element: // The node is an element.
                      Console.Write("<" + reader.Name);
                      Console.WriteLine(">");
                      break;
                 case XmlNodeType.Text: //Display the text in each element.
                      Console.WriteLine(reader.Value);
                      break;
                 case XmlNodeType.EndElement: //Display the end of the element.
                      Console.Write("</" + reader.Name);
                      Console.WriteLine(">");
                      break;
              }

           }

           reader.Close();

       }

    }
    catch (System.IO.FileNotFoundException e)
    {
     // If file was deleted by a separate application or thread since the call to TraverseTree() then just continue.
         Console.WriteLine(e.Message);
         continue;
    }

}

当我在单个文件上使用XML.Create时(参见本作品),我可以阅读该文档中的所有内容。当我使用fi.Name时,我会看到消息“Processing file:”,然后,对于目录中的每个xml文件,我看到“找不到文件”C:\ Documents and Settings \\ My Documents \ Visual Studio 2010 \ Projects \ MoveReportsTest \ MoveReportsTest \ bin \ Debug \。

我尝试移动阅读器实例化,首先,它被实例化为每个文件,我尝试移动reader.Close(),认为我无法为每个文件实例化相同的阅读器,但它没有改变任何东西(同样的错误)。 '找不到文件消息不是来自任何口号......我无能为力......请帮忙!谢谢!

2 个答案:

答案 0 :(得分:1)

当您引用fi.Name时,它只选择文件的名称。如果您在路径中仅提供文件名,则默认路径将是二进制文件所在的文件夹,以便您在异常中看到:C:\Documents and Settings\\My Documents\Visual Studio 2010\Projects\MoveReportsTest\MoveReportsTest\bin\Debug\

完整的路径传递给您要阅读的XML文件=&gt; fi.FullName

答案 1 :(得分:0)

由于错误,听起来您正在搜索相对位置的文件,但请记住,如果您仅使用fi.Name,它会查找相对位置,我建议使用{{3如果您没有使用相对位置。

FileInfo -> C:/Location/File.Ext
FileInfo.Name -> File.Ext
FileInfo.FullName -> C:/Location/File.Ext

reader = XmlReader.Create(fi.FullName);