永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-03-21 16:08
  • 提问者网友:雾里闻花香
  • 2021-03-21 09:16
代码如下:
我实验,当看到电脑变量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
#include
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++;
}
return 0;
}

尝试在fclose(pfile)前面加上fflush(pfile)了
还是没有效果
最佳答案
  • 五星知识达人网友:渡鹤影
  • 2021-03-21 10:50
fprintf 是有缓冲的。也就是说,你调用fprintf的时候,只是写在缓冲中了,实际上写入硬盘是要等待缓冲满。可以用fflush(pfile)来把缓冲写入硬盘。
全部回答
  • 1楼网友:一把行者刀
  • 2021-03-21 14:17
跟操作系统有关。
  • 2楼网友:枭雄戏美人
  • 2021-03-21 13:41
最后调用一次fflash(). 试试。 再看看别人怎么说的。
  • 3楼网友:零点过十分
  • 2021-03-21 12:07
可能是还没有把缓存写入硬盘你就断电了吧
  • 4楼网友:你可爱的野爹
  • 2021-03-21 11:05
在 fprintf(pfile,"%u\n",hh); 下面加条语句fflush(pfile); 虽然关闭文件的时候也会写入缓冲区,但有一定的延迟。 笔记本的原因,可能是文件描述符分配太频繁了,已经用尽,或者是这个文件上连接的文件描述符太多了,没有更多的位置。 关闭文件句柄后,一些善后处理,机器会在后台默默执行。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯