【问题标题】:OpenFileDialog reads only the first fileOpenFileDialog 只读取第一个文件
【发布时间】:2015-07-02 13:46:24
【问题描述】:

我正在使用以下代码打开多个 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有关。我做错了什么?

【问题讨论】:

    标签: c# streamreader openfiledialog


    【解决方案1】:

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

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

    Which in turn:

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

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

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

    【讨论】:

      【解决方案2】:

      这一行正在从 OpenFileDialog 打开文件:

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-08-21
        • 2010-12-26
        • 2016-12-05
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 2013-01-23
        • 2011-10-25
        • 1970-01-01
        相关资源
        最近更新 更多