我有以下代码,在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,但它没有用.
有什么建议?
如果您检查文件是否正在执行cat,则可能是您的shell配置错误,如果没有行结束则不会打印该行.
std::endl添加\n 和冲洗.
不知道这是你尝试过的,但你应该这样做:
file << "Hello World" << std::flush;
Run Code Online (Sandbox Code Playgroud)
更新 ; 由于有用的评论,我在这里留下这个答案
根据反馈,我将修改我的建议:您不必显式调用std::flush(或者file.close()就此而言),因为析构函数会为您执行此操作.
此外,调用flush显式强制执行可能不是最优化方式的I/O操作.推迟到底层的iostream和操作系统会更好.
显然OP的问题与调用或不调用无关std::flush,可能是因为在调用文件流析构函数之前尝试读取文件.
析构函数应该刷新并关闭文件.
我很确定,错误是另一个地方
1)您没有在正确的时间点检查.您在哪个位置比较文件的内容,"退出"后退出,还是在程序退出之前设置断点然后检查文件内容?
2)程序以某种方式崩溃才会退出?