C ++ ofstream flush有时会丢失尾随空值

时间:2014-02-19 05:22:55

标签: c++ flush

在使用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来“初始化”事物,因为随后的值会被正确写入。

0 个答案:

没有答案