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有关。我做错了什么?
您在每次迭代中都使用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);