【发布时间】:2012-02-23 09:28:13
【问题描述】:
以下代码将打印一些内容到文件中
std::fstream fout ("D_addr.txt", std::fstream::app);
fout << pkt->Addr() << std::endl;
flush(fout);
fout.close();
调试时,我看了pkt->Addr(),它有一些值。 fout 行顺利通过。还会创建文件D_addr.txt。但是关闭文件后,文件大小为零!没有写入任何内容。
问题出在哪里?
【问题讨论】:
-
pkt->Addr()的返回类型是什么?
-
它是
typedef uint64_t Addr; -
尝试检查流状态。如果文件无法打开,构造函数设置
failbit。您可以使用fstream::good检查流是否已准备好进行 I/O 操作 -
@ChristianAmmer 你不使用
fstream::good。打开后,通常使用fstream::is_open,但每个操作(或操作序列)之后的一般测试是ios_base::fail,或者使流像bool一样的重载运算符。你检查之后操作,而不是之前。 -
@JamesKanze:通常我使用重载的运算符并编写例如
if (fout) {...但是为什么使用good来测试流是否准备好不太好——我以为它会检查所有错误标志?