1

我的任务是单击按钮后打开多个文件,并读取所有这些选定的文件。

我在 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();
}
4

1 回答 1

0

根据返回的 Container 类型,在-header 中std::for_each定义了一个。<algorithm>该函数如下所示:

#include <algorithm>

std::for_each(InputIterator first, InputIterator last, Function fn);

您需要提供两个iterators,一个用于 Container 的开头,一个用于迭代器的结尾。作为第三个参数,您可以提供一个函数(函数对象)并对当前参数进行操作。

请参阅此处以获取更多参考。

当我从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);

这最接近foreach于 C#。

在这里寻找System::Array::ForEach和在这里寻找OpenFileDialog::SafeFileNames

于 2013-03-21T20:01:36.893 回答