OpenFileDialog只读取第一个文件

时间:2015-07-02 13:46:25

标签: c# streamreader openfiledialog

我使用以下代码打开多个XML文件并读取文件的内容但它不起作用。

OpenFD.Filter = "XML Files (*.xml)|*.xml";
OpenFD.Multiselect = true;

if (OpenFD.ShowDialog() == DialogResult.OK)
{
    foreach (string file in OpenFD.FileNames)
    {
        MessageBox.Show(file);

        System.IO.Stream fileStream = OpenFD.OpenFile();
        System.IO.StreamReader streamReader = new System.IO.StreamReader(fileStream);
        using (streamReader)
        {
            MessageBox.Show(streamReader.ReadToEnd());
        }
        fileStream.Close();
    }
}

出于测试目的,我创建了两个xml文件。

  • file1.xml(其内容为" string1")
  • file2.xml(其内容为" string2")

当我打开对话框并选择这两个文件时,我收到四条消息。

  • file1.xml
  • 字符串1
  • file2.xml
  • 字符串1

即使OpenFileDialog正确读取文件名,我也无法读取第二个文件。它只读取第一个文件。所以我猜测问题与StreamReader有关,而与OpenFileDialog无关。我做错了什么?

2 个答案:

答案 0 :(得分:3)

您在每次迭代which中使用OpenFD.OpenFile()

  

打开由 FileName 属性指定的用户选择的文件。

Which in turn

  

只能是一个选定文件的名称

使用循环中的file变量,以及StreamReader constructor that accepts a string

using (var streamReader = new System.IO.StreamReader(file))
{
    MessageBox.Show(streamReader.ReadToEnd());
}

答案 1 :(得分:3)

这一行是从OpenFileDialog打开文件:

System.IO.Stream fileStream = OpenFD.OpenFile();

但是没有规定哪个文件。您需要一种方法来区分您要打开的文件。我会一起摆脱那一行,只使用你在循环中的字符串文件。

System.IO.StreamReader streamReader = new System.IO.StreamReader(file);