2015-07-02 35 views
0

我正在使用以下代碼打開多個XML文件並讀取文件的內容,但它不起作用。OpenFileDialog只讀取第一個文件

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(其內容是 「字符串1」)
  • file2.xml(其內容是 「字符串2」)

當我打開對話框,選擇這兩個文件,我得到四條消息。

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

即使打開文件對話框正確讀取文件名,我無法讀取第二個文件。它只讀取第一個文件。所以我猜這個問題與StreamReader有關,而不是OpenFileDialog。我究竟做錯了什麼?

回答

3

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

打開用戶選擇的文件,[...]由文件名屬性指定。

Which in turn

只能一個選定的文件的名稱。

從你的循環使用file變量,而不是和StreamReader constructor that accepts a string

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

這條線從打開文件對話框中打開文件:

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

但目前還沒有規範的文件。您需要一種方法來區分您打開的文件。我會一起擺脫那條線,並使用循環中的字符串文件。

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