ofstream不冲洗

kin*_*r_e 9 c++ ofstream

我有以下代码,在Suse 10.1/G ++ 4.1.0上运行,它不写入文件:

#include <fstream>
#include <iostream>

int main(){
    std::ofstream file("file.out");
    file << "Hello world";
}
Run Code Online (Sandbox Code Playgroud)

文件已正确创建并打开,但为空.如果我将代码更改为:

#include <fstream>
#include <iostream>

int main(){
    std::ofstream file("file.out");
    file << "Hello world\n";
}
Run Code Online (Sandbox Code Playgroud)

(添加\n到文本),它的工作原理.我也试过冲洗ofstream,但它没有用.

有什么建议?

log*_*og0 8

如果您检查文件是否正在执行cat,则可能是您的shell配置错误,如果没有行结束则不会打印该行.
std::endl添加\n 冲洗.

  • 是的,试试做`cat file; echo`.不要盲目地使用`endl`.我讨厌使用那个愚蠢的构造的代码,我希望标准人们将其从标准中删除.冲洗是昂贵的,并且应该始终有意识地并且经过深思熟虑地完成. (3认同)

Joh*_*don 5

不知道这是你尝试过的,但你应该这样做:

file << "Hello World" << std::flush;
Run Code Online (Sandbox Code Playgroud)

更新 ; 由于有用的评论,我在这里留下这个答案

根据反馈,我将修改我的建议:您不必显式调用std::flush(或者file.close()就此而言),因为析构函数会为您执行此操作.

此外,调用flush显式强制执行可能不是最优化方式的I/O操作.推迟到底层的iostream和操作系统会更好.

显然OP的问题与调用或不调用无关std::flush,可能是因为在调用文件流析构函数之前尝试读取文件.

  • `ofstream`析构函数应该自动刷新. (2认同)

Fru*_*nsi 5

析构函数应该刷新并关闭文件.

我很确定,错误是另一个地方

1)您没有在正确的时间点检查.您在哪个位置比较文件的内容,"退出"后退出,还是在程序退出之前设置断点然后检查文件内容?

2)程序以某种方式崩溃才会退出?