关于fopen,fprintf,fclose的一个疑难杂症,百思不得其解,请高手指教!!! 10

代码如下:我实验,当看到电脑变量hh显示到7391的突然拔掉电脑电源,让他断电,随后重新启动电脑,进去c:\\1.txt的文件看,发现数据之保存到6000多条,也就是少了... 代码如下:
我实验,当看到电脑变量hh显示到7391的突然拔掉电脑电源,让他断电,随后重新启动电脑,进去c:\\1.txt的文件看,发现数据之保存到6000多条,也就是少了1000多条的数据,请问代码要怎么改才能使他在断电后依然可以保存数据?
用fputs的方法也没用,用CreateFile的方式来实验也没用。
是不是微软自己本身的问题,希望高手指教。
还有另外在某些笔记本电脑上,一直频繁的if ((pfile=fopen("c:\\1.txt","a"))==NULL)
的话,到了10000万次的时候会出现找不到文件的返回值,打开失败,不知道是什么原因
同样求解。

C/C++ code
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
FILE *pfile;
DWORD hh=0;
while (true)
{
if ((pfile=fopen("c:\\1.txt","a"))==NULL)
if ((pfile=fopen("c:\\1.txt","w"))==NULL)
return 0;
fprintf(pfile,"%u\n",hh);
fclose(pfile);
//TRACE("hh=%u\n",hh);
cout<<hh<<endl;
hh++;
}
return 0;
}
尝试在fclose(pfile)前面加上fflush(pfile)了
还是没有效果
展开
 我来答
lcshui
2012-01-06
知道答主
回答量:17
采纳率:0%
帮助的人:21万
展开全部
在 fprintf(pfile,"%u\n",hh); 下面加条语句fflush(pfile); 虽然关闭文件的时候也会写入缓冲区,但有一定的延迟。 笔记本的原因,可能是文件描述符分配太频繁了,已经用尽,或者是这个文件上连接的文件描述符太多了,没有更多的位置。 关闭文件句柄后,一些善后处理,机器会在后台默默执行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
速讯咨询
2024-10-23 广告
SMETA audit是指工厂的社会责任验厂审核报告,买家要这个报告才能下订单给工厂,没有这个报告,订单可能就黄了。有问题可以咨询我们 181-3883-8005 李经理【了解SMETA认证费用】SMETA认证基于2pillar or 4p... 点击进入详情页
本回答由速讯咨询提供
airuqixue
2012-01-06
知道答主
回答量:23
采纳率:100%
帮助的人:10.8万
展开全部
fprintf 是有缓冲的。也就是说,你调用fprintf的时候,只是写在缓冲中了,实际上写入硬盘是要等待缓冲满。可以用fflush(pfile)来把缓冲写入硬盘。
更多追问追答
追问
已经加上fflush(pfile)了
还是没有效果
追答
fflush也并非是百分之百的写入硬盘,这个的话,操作系统会权衡,你的fflush只是调用操作系统相关的函数,但是具体算法是系统实现的。你突然拔电,是一种硬件中断,所以任何异常都可能出现的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zfb103
2012-01-06 · TA获得超过312个赞
知道小有建树答主
回答量:265
采纳率:100%
帮助的人:92.1万
展开全部
最后调用一次fflash(). 试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
asok00000
2012-01-06 · TA获得超过176个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:146万
展开全部
可能是还没有把缓存写入硬盘你就断电了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vinix
2012-01-06 · TA获得超过214个赞
知道小有建树答主
回答量:299
采纳率:0%
帮助的人:283万
展开全部
跟操作系统有关。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式