0

下面的代码完全符合它的预期,但有一个例外。修改后的缓冲区内容未保存到文件中。我已经单步执行了代码,我可以看到缓冲区正在更改,所以我不确定发生了什么。任何意见将不胜感激。

bool replacestring(char *ifile, wstring& searchString, wstring& replacementString)
{
    wstring buffer;
    wifstream finout(ifile, ios_base::in | ios_base::out | ios_base::binary);

if(!finout.is_open())
{
    cout << "Can not open file " << endl;
    return(1);
}
while(getline(finout,buffer))
{
    auto pos = buffer.find( searchString ) ;
    while( pos != std::string::npos )
    {
        buffer.replace( pos, searchString.size(), replacementString ) ;
        pos = buffer.find( searchString, pos + replacementString.size() ) ;
    }
    if(finout.bad())
        perror("BAD READ");
}
finout.close();
return 0;
}
4

1 回答 1

2

将一些数据从流复制到缓冲区后,该缓冲区与流分离,对缓冲区所做的更改不会反映在流中。

ifstream并且wifstream是输入流,而不是输出流。

filebuf或者wfilebuf可能是你想要的。

Boost.Iostreams

ofstream使用or写入第二个文件可能更容易wofstream。这也将避免破坏现有文件的风险。

类似的问题:

于 2013-05-05T13:12:02.843 回答