OpenFileDialog只读取第一个文件

本文关键字:文件 第一个 读取 OpenFileDialog | 更新日期: 2023-09-27 18:00:53

我正在使用以下代码打开多个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(其内容为"字符串2"(

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

  • 文件1.xml
  • 字符串1
  • 文件2.xml
  • 字符串1

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

OpenFileDialog只读取第一个文件

您在每次迭代中都使用OpenFD.OpenFile(),它是:

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

反过来:

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

使用循环中的file变量,以及接受字符串的StreamReader构造函数:

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

此行从OpenFileDialog:打开文件

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

但是没有指定哪个文件。你需要一种方法来区分你正在打开的文件。我会把这一行全部去掉,只使用循环中的字符串文件。

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