【问题标题】:Need some help understanding why wifstream buffer not being saved back to file需要一些帮助来理解为什么 wifstream 缓冲区没有被保存回文件
【发布时间】:2013-05-05 12:49:41
【问题描述】:

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

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;
}

【问题讨论】:

    标签: c++ iostream


    【解决方案1】:

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

    ifstreamwifstream 是输入流,而不是输出流。

    filebufwfilebuf 可能是您想要的。

    Boost.Iostreams

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

    类似的问题:

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 2011-03-09
      • 2012-02-10
      • 2012-02-02
      • 2016-02-10
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 2016-07-14
      相关资源
      最近更新 更多