- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言程序设计-提高篇-第3章 文件-3
例4:数据块(二进制形式)的读写 fread(buffer,size,count,fp) 功能:从指定文件读入count个大小为size的字节数据块,存入buffer所指存储单元。返回所读的数据项个数,如遇文件结束或出错返回0。 fwrite(buffer,size,count,fp) 功能: 从buffer所指存储单元的数据取size ×count个字节送fp所指文件。返回写到fp所指文件中的数据项的个数。 例4:数据块(二进制形式)的读写 fread(buffer,size,count,fp) fwrite(buffer,size,count,fp) 说明: buffer为输入输出在内存中存放的首地址; size为读、写的字节数,即数据块的大小; count为输入输出的数据项的个数; fread()和fwrite()用于二进制文件的输入输出。 #include stdio.h #include process.h #define SIZE 4 struct student { char name[10]; int num,age; char addr[15]; }stud[SIZE]; void save_load() { FILE *fp; int i; if((fp=fopen(stu_list,wb+))==NULL) { printf(cannot open file.\n); exit(0); } for(i=0;iSIZE;i++) { if(fwrite(stud[i],sizeof(struct student),1,fp)!=1) { printf(file write error!\n); exit(0);} } rewind(fp); for(i=0;iSIZE;i++) { if(fread(stud[i],sizeof(struct student),1,fp)!=0) printf(%-10s %4d %4d %-15s\n, stud[i].name,stud[i].num, stud[i].age, stud[i].addr);} } 输入: zhang 1001 19 room_101 li 1002 19 room_102 wang 1003 21 room_103 zhao 1004 21 room_104 输出: zhang 1001 19 room_101 li 1002 19 room_102 wang 1003 21 room_103 zhao 1004 21 room_104 void main() { int i; for(i=0;iSIZE;i++) scanf(%s %d %d %s, stud[i].name, stud[i].num,stud[i].age, stud[i].addr); save_load(); } 回顾:fgetc( ), fputc( ) fgets( ), fputs( ) fscanf( ), fprintf( ) 这些函数都是按顺序读/写文件 3.5 文件的随机读写 解决的办法:把文件指针移到指定的位置即可。 关键步骤:文件的定位。 3.5 文件的随机读写 问题:要求打开文件后,对指定位置上的数据进行读写操作,减少一些不必要的中间环节。 一、对文件随机存取的思想 ? 对一个文件流,有主观的愿望要取指定位置的记录和更新指定位置的记录。 如:对一个文件流 可以有两种目的: ? 从第i个字节开始,读取k个字节的内容 ? 把k个字节的内容写到从第i个字节开始后 存在的问题:读取的内容是否满足我们的要求? 3 0 1 2 结束标志 … … k i n?1 二、随机存取的应用 ? 随机存取文件适合于具有固定长度记录的文件 程序可以很方便的访问到指定位置处的记录。 访问 … 100 200 300 400 500 … 结束标志 0 100个字节 100个字节 100个字节 100个字节 100个字节 100个字节 三、随机存取的目的 1. 方便、快捷 2. 只改变指定位置后的固定长度字节的内容(不会破坏其它的数据) 结束标志 … 读取、修改等 问题的实质:把指定的数据写到文件流中指定的位置。 问题的关键:把文件指针定位到文件流中指定的位置。 步骤:定位??写数据 四、向随机文件中随机地写入数据 五、文件定位函数 fseek(文件指针变量、 位移量、起始点) 注: 起始点的取值只有3种: 位移量:以起始点为基点移动的字节数 0 ?? 文件开始处 1 ?? 文件位置指针的当前位置 2 ??
文档评论(0)