2

我在我的代码中设置了一个多选功能,允许我打开多个“.txt”形式的文件。问题来了,通过 OpenFileDialog 打开所有这些选定的文件后,我将如何读取这些文件?以下代码和“for each”行,当我使用 System::Diagnostics::Debug 时,它只显示文件中的数据,而其他文件的数据丢失。我应该如何修改“for each”之后的代码?任何人都可以提供一些建议或意见吗?选择的文件为 1_1.txt、2_1.txt、3_1.txt。感谢您的回复,并提前致谢。

这是我的书面代码,

Stream^ myStream;  
OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;  
openFileDialog1->InitialDirectory = "c:\\";  
openFileDialog1->Title = "open captured file";  
openFileDialog1->Filter = "CP files (*.cp)|*.cp|All files (*.*)|*.*|txt files (*.txt)|*.txt";  
openFileDialog1->FilterIndex = 2;  
openFileDialog1->Multiselect = true;  

if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )  
{  
  array<String^>^ lines = System::IO::File::ReadAllLines(openFileDialog1->FileName);  
  for each (String^ line in lines) {  
    //?????  
    System::Diagnostics::Debug::WriteLine("",line);  
  }  
}  
4

3 回答 3

1

OpenFileDialog.FileNames如果您允许选择多个文件,则需要查看该属性:

if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )  
{  
  for each (String^ file in openFileDialog1->FileNames) 
  {  
    array<String^>^ lines = System::IO::File::ReadAllLines(file);  
    for each (String^ line in lines) 
    {  
      System::Diagnostics::Debug::WriteLine("",line);  
    }
  }  
}  
于 2013-03-22T17:42:25.960 回答
0

使用该FileNames物业。

C#版本(应该很容易适应C++):

foreach (var file in openFileDialog1.FileNames)
{
    foreach (var line in File.ReadAllLines(file)
    {
    ...
    }
}
于 2013-03-22T17:41:22.407 回答
0

使用openFileDialog1->FileNames. 它返回您选择的多个文件名

在这里阅读 http://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog.multiselect.aspx 它在 C# 中,但是很容易推断到 C++。

于 2013-03-22T17:43:19.157 回答