使用迭代器将文件的一部分复制到另一个文件

时间:2015-11-10 23:36:50

标签: c++ iterator filestream

我还在练习C ++,而且我在文件流上遇到了char迭代器的问题。

我想将文件的一部分复制到另一个(临时)文件。我想在第一个文件中找到一个特定的字符串(我使用std :: find算法),以便知道我可以在哪里" cut"要复制的文件部分(希望有意义)。我的问题是,使用以下代码,我有一个我不太了解的编译错误。

我的代码部分看起来像这样:

ifstream readStream(fileName.c_str());
istreambuf_iterator<char> fStart(readStream);
istreambuf_iterator<char> fEnd;
auto position = find(fStart, fEnd, refToReplace); // refToReplace is a std::string
if (position != fEnd){ // If the reference appears in the file
    ofstream tempStream("temp.fsr"); // create the temp file
    copy(fStart, position , ostreambuf_iterator<char>(fluxTemp)); // and copy the part I want (before the matching string)
}
else{
            continue;
}

编译错误我进入&#34; stl_algo.h&#34;:

error: no match for 'operator==' in '__first.std::istreambuf_iterator<_CharT, _Traits>::operator*<char, std::char_traits<char> >() == __val'

提前谢谢。

1 个答案:

答案 0 :(得分:1)

编译错误应该带有一个实例化回溯,它会告诉你哪个调用最终导致错误。

在您的情况下,这将指向find来电。 find查找单个元素,迭代器的元素类型是单个字符,但是您传递一个字符串。 (根据您的说明。您的代码段实际上并没有告诉我们refToReplace的类型。)

您正在寻找的算法是search,但这需要前向迭代器,而不是streambuf迭代器。

您需要选择其他方法。