在使用VC ++ 2010专业版的Windows7上使用带有ofstream的flush时,我得到了令人费解的文件输出。
基本上,我想序列化一些值,并在调试时检查它们。为什么文件包含错误的序列化值,直到写入INT_MAX max?注意unsigned int值是如何被截断的(只有前两个字节),然后在写入INT_MAX值后,缺少的字节重新出现。很奇怪。我在断点期间在单独的HEX编辑器中检查文件。
这在调试或发布模式下似乎是一个问题,并且似乎只影响以一对00(NULL)结尾的值。
ofstream myStream("testfile.txt", ios::out | ios::binary);
unsigned int val = 3;
myStream.write((char *) &val, 4);
myStream.flush();
// breakpoint, check file HEX: 03 00
// ^^ ^^ missing values
val = 4;
myStream.write((char *) &val, 4);
myStream.flush();
// breakpoint check file HEX: 03 00 04 00
// ^^ ^^ missing values
val = INT_MAX;
myStream.write((char *) &val, 4);
myStream.flush();
// breakpoint check file HEX: 03 00 00 00 04 00 00 00 FF FF FF 7F
// ^^ ^^ ^^ ^^ reappeared values
我尝试过写入网络磁盘,在FileHandle上调用_commit和fflush并试图链接commode.obj(虽然我完全不确定链接是否真的发生了)。这些都没有帮助。我现在能做的最好的事情是在序列化开始时写出INT_MAX来“初始化”事物,因为随后的值会被正确写入。