关于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)了
还是没有效果 展开
我实验,当看到电脑变量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)了
还是没有效果 展开
展开全部
在 fprintf(pfile,"%u\n",hh); 下面加条语句fflush(pfile); 虽然关闭文件的时候也会写入缓冲区,但有一定的延迟。 笔记本的原因,可能是文件描述符分配太频繁了,已经用尽,或者是这个文件上连接的文件描述符太多了,没有更多的位置。 关闭文件句柄后,一些善后处理,机器会在后台默默执行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
速讯咨询
2024-10-23 广告
2024-10-23 广告
SMETA audit是指工厂的社会责任验厂审核报告,买家要这个报告才能下订单给工厂,没有这个报告,订单可能就黄了。有问题可以咨询我们 181-3883-8005 李经理【了解SMETA认证费用】SMETA认证基于2pillar or 4p...
点击进入详情页
本回答由速讯咨询提供
展开全部
fprintf 是有缓冲的。也就是说,你调用fprintf的时候,只是写在缓冲中了,实际上写入硬盘是要等待缓冲满。可以用fflush(pfile)来把缓冲写入硬盘。
更多追问追答
追问
已经加上fflush(pfile)了
还是没有效果
追答
fflush也并非是百分之百的写入硬盘,这个的话,操作系统会权衡,你的fflush只是调用操作系统相关的函数,但是具体算法是系统实现的。你突然拔电,是一种硬件中断,所以任何异常都可能出现的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最后调用一次fflash(). 试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可能是还没有把缓存写入硬盘你就断电了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
跟操作系统有关。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询