OpenFileDialog 只读取第一个文件

OpenFileDialog reads only the first file

我正在使用以下代码打开多个 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 文件。

当我打开对话框和 select 这两个文件时,我收到了四条消息。

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

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

Opens the file selected by the user, [...] specified by the FileName property.

Which in turn:

can only be the name of one selected file.

改用循环中的 file 变量,StreamReader constructor that accepts a string:

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