2 u011352884 u011352884 于 2014.08.31 11:18 提问

c++文件写入时的数据丢失

问题描述:将数据写入到文件中,共有n组数据,每组数据的大小为size.

方式一:
ofstream out;
out.open("hello.rar",ofstream::binary);
for(i=0;i<n;i++)
{
out.write(data[i],size);
}
方式二:
for(i=0;i<n;i++)
{
ofstream out;
out.open("hello.rar",ofstream::binary|ofstream::app);
out.write(data[i],size);
}

结果:
方式一会丢失部分数据。
方式二能完整复制。

疑问:
《方式一》首先打开文件,在for语句执行过程中,未关闭文件,每次写入都是从上一次结束的位置开始,那么为何会产生数据丢失?
和方式二在本质上有何区别呢?

2个回答

lym753024200
lym753024200   2014.08.31 19:44

用txt文件试试可以直接查看写入数据,再就是你直接用插入操作符输出就行了

diqiu50
diqiu50   2014.08.31 22:26

方式一和方式二的却别在于:
方式1没有显示的call flush, 文件内容写入缓冲区,可能并未全部写入磁盘。如果程序正常退出。系统会调用flush,这样也没有问题。但是如果程序未能正常退出,则flush将不会调用。缓冲区的部分文件内容就会丢失。方式二每次循环都要打开关闭文件,这样就保证了写入的内容都完整写入磁盘。

Csdn user default icon
上传中...
上传图片
插入图片