我的任务是在单击按钮后打开多个文件,并读取所有选定的文件。
我在c#中找到了一个foreach函数的例子,但是我想用C ++编写它。我该如何转换呢?
它显示System::String
的错误,如果没有顶级'^',则无法使用此类型。
我还是新手。有人能提出建议吗?
非常感谢。
以下是我的书面代码
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->RestoreDirectory = true;
openFileDialog1->Multiselect = true;
if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
{
**for each (String line in openFileDialog1->FileName)**
System::Diagnostics::Debug::WriteLine("{0}",line);
myStream->Close();
}
答案 0 :(得分:0)
根据返回的Container类型,std::for_each
- 标头中定义了<algorithm>
。
功能看起来像这样:
#include <algorithm>
std::for_each(InputIterator first, InputIterator last, Function fn);
您需要提供两个iterators
,一个用于Container的开头,另一个用于迭代器的结尾。作为第三个参数,您可以提供函数(函数对象)并对当前参数进行操作。
有关详细信息,请参阅here。
当我从MSDN获得时,属性SafeFileNames
会返回array<String^>
。
System::Array
提供了一个名为Array::ForEach
的静态方法。您需要将其称为
System::Action<T> myAction; // You will Need to provide a function here to be used on every filename.
System::Array::ForEach(openFileDialog1->SafeFileNames, myAction);
这与C#中的foreach
最接近。
查看System::Array::ForEach
here和OpenFileDialog::SafeFileNames
here。