我使用以下代码遍历一个目录,查找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(),认为我无法为每个文件实例化相同的阅读器,但它没有改变任何东西(同样的错误)。 '找不到文件消息不是来自任何口号......我无能为力......请帮忙!谢谢!
答案 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);