如何解决“for each”循环中的“String”

时间:2013-03-21 19:56:20

标签: string c++-cli managed-c++

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

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

1 个答案:

答案 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 hereOpenFileDialog::SafeFileNames here