【问题标题】:C++ output stream to a file is not working到文件的 C++ 输出流不起作用
【发布时间】:2017-11-04 07:41:02
【问题描述】:

我的代码如下。缓冲区有数据,但 fout2.write 不做任何事情。文件已创建,但为空。

ofstream fout2(fname, ios::binary);
fout2.open(fname, ios::binary | ios::in | ios::out);
if (fout2.is_open()) {
    //problem is here   //write the buffer contents
    fout2.write(rmsg.buffer, rmsg.length);
    fout2.flush();
    memset(rmsg.buffer, 0, sizeof(rmsg.buffer)); //clear the buffer

【问题讨论】:

  • 为什么要打开文件两次?
  • 只使用 ofstream fout2(fname, ios::binary) if 语句总是返回 false... 所以我添加了 fout2.open(...
  • 试试ofstream fout2(fname, ios::binary | ios::in | ios::out);
  • 效果不佳
  • 它应该工作相同。构造函数的参数被视为与调用 open 相同。

标签: c++ file ofstream


【解决方案1】:

如果您打算同时进行输入和输出,正如您使用ios::in 所暗示的那样,您应该使用fstream,而不是ofstream。那么你应该在构造函数中传递所有的打开模式,你不需要调用open()

fstream fout2(fname, ios::binary | ios::in | ios::out);

【讨论】:

    【解决方案2】:

    您可能忘记关闭文件。你可以通过

    fout2.close()
    

    或者通过简单地关闭 fout2 的范围:

    {
        ofstream fout2(fname, ios::binary);
        fout2.open(fname, ios::binary | ios::in | ios::out);
        if (fout2.is_open()) {
             fout2.write(rmsg.buffer, rmsg.length);
             //out2.flush(); // no need for this
             memset(rmsg.buffer, 0, sizeof(rmsg.buffer)); //clear the buffer
        }
    }
    

    【讨论】:

    • 这不是out2.flush()的重点吗?这应该将缓冲区发送到文件,即使它没有关闭。
    • 我尝试不使用 flush() 并使用它.. 我还关闭了文件和范围.. 没有任何效果...文件只是用 0 字节创建!
    • Haya's 的情况下,flush() 是语法盐,当调用 fout2 析构函数时无论如何都会调用它
    • 不,我测试的时候是 51
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多