| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 899 人关注过本帖
标题:fclose()的困惑
只看楼主 加入收藏
lookof
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-7-20
收藏
 问题点数:0 回复次数:1 
fclose()的困惑

写了一个c程序,是关于用fwrite向文件写入数据的。但是怎么也写不进去,文件总是空的。有问题的代码如下。

.....
.....
fp2=fopen(strcat(filename,p->name),"ab");
r=(GUinform *)malloc(sizeof(GUinform));
printf("input your information below:\n\n");
printf("Name: ");
scanf("%s",&r->name);
printf("Sex:1.male 2.female ");
scanf("%d",&r->sex);
printf("Adress: ");
scanf("%s",&r->adress);
printf("Phone: ");
scanf("%s",&r->phone);
count++;
fwrite(r,sizeof(struct GUinform),1,fp2);
filename[NUM]="GUEST_INFORMATION\\";
break;
fclose(fp2);
.....
.....
检查了半天,发现如果把fclose(fp2)放在break之前,就能写进去了。这就说明,是文件没有关闭的原因。于是查书,发现以下说明:
“应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将会丢失数据。因为,在向文件写数据时,是先将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose函数关闭文件,可以解决这个问题,它先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。”

觉得这是此问题的解决良方。而文件未关闭导致数据丢失也是失败的主要原因。
但是,如果再测试别的,比如,写一个简单的。如下:

#include <stdio.h>
main(){
FILE *fp;
char ch[]="this is a test.";
fp=fopen("filename","wb");
fwrite(ch,15,1,fp);
}

发现,即使不写fclose(fp),也能写入到文件。不禁困惑了。为什么这个违反规则可以,而上面那个却不可以?

搜索更多相关主题的帖子: fclose 困惑 
2007-07-20 01:20
Skai
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-8-30
收藏
得分:0 
文件是全缓冲的 你写的东西在缓冲当中 没有填满缓冲区的情况下需要刷新缓冲区 说了你也不明白

2007-07-20 13:37
快速回复:fclose()的困惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016078 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved