文件缓存文件写入失败

缓存文件写入失败  时间:2021-02-25  阅读:()
自定义类型(typedef):1.
自定义类型(typedef):将C语言中的已有类型(包括已定义过的自定义类型)重新命名新的名称可以代替已有数据类型常用于简化对复杂数据类型定义的描述typedef;自定义类型(typedef)typedef;typedefintINTEGER;inti,j;INTEGERi,j;typedefint*POINTER;int*p1;POINTERp1;自定义类型(typedef)的使用方法定义变量inti变量名新类型名intINTEGER加上typedeftypedefintINTEGER用新类型名定义变量INTEGERi;定义一个数组类型:IntArrayinta[10];intIntArray[10];typedefintIntArray[10];IntArraya;inta[10];Chap12文件12.
1将短句"HelloWorld"写入到文件12.
2读取学生成绩文件12.
3文件复制12.
4文件综合应用:个人小金库的管理本章要点什么是文件C文件是如何存储的什么是文本文件和二进制文件怎样打开、关闭文件怎样编写文件读写程序怎样编写程序,实现简单的数据处理12.
1将短句"HelloWorld"写入到文件例12-1把短句"HelloWorld!
"保存到磁盘文件f1.
txt中.
#include#includeintmain(void){FILE*fp;/*定义文件指针*/if((fp=fopen("f1.
txt","w"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}fprintf(fp,"%s","HelloWorld!
写文件*/if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}return0;}例12-1源程序12.
1.
2文件的概念文件:保存在外存储器上的一组数据的有序集合特点:数据长久保存数据长度不定数据按顺序存取12.
1.
3文本文件和二进制文件C语言中的文件是数据流文件的两种数据形式:ASCII码(文本文件textstream)字符流二进制码(二进制文件binarystream)二进制文件是直接把内存数据以二进制形式保存.
例如,整数1234文本文件保存:49505152(4个字符)二进制文件保存:04D2(1234的二进制数)12.
1.
4缓冲文件系统内存单元数据……文件磁盘速度慢,直接把数据写到磁盘效率很低12.
1.
4缓冲文件系统向磁盘输出数据:数据缓冲区,装满缓冲区后磁盘文件.
从磁盘读入数据:先一次性从磁盘文件将一批数据输入到缓冲区,然后再从缓冲区逐个读入数据到变量.
数据……缓冲器512字节……文件由操作系统自动完成程序控制内存单元内存单元缓冲文件与文件类型指针用文件指针指示文件缓冲区中具体读写的位置FILE*fp;fp同时使用多个文件时,每个文件都有缓冲区,用不同的文件指针分别指示.
typedefstruct{shortlevel;unsignedflags;……}FILE;第242页FILE:结构类型用typedef定义,在头文件中typedefstruct{shortlevel;/*缓冲区使用量*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*文件缓冲区的首地址*/unsignedchar*curp;/*指向文件缓冲区的工作指针*/unsignedcharhold;/*其他信息*/unsignedistemp;shorttoken;}FILE;2.
文件结构-FILE3.
文件类型指针FILE*fp指向文件缓冲区,通过移动指针实现对文件的操作fp同时使用多个文件时,每个文件都有缓冲区,用不同的文件指针分别指示.
如何使fp与具体文件挂钩12.
2读取学生成绩文件例12-2已知一个数据文件f.
txt中保存了5个学生的计算机等级考试成绩,包括学号、姓名和分数,文件内容如下,请将文件的内容读出并显示到屏幕中.
301101张文91301102陈慧85301103王卫东76301104郑伟69301105郭温涛5512.
2.
1程序解析#include"stdio.
h"intmain(void){FILE*fp;/*定义文件指针*/longnum;charstname[20];intscore;if((fp=fopen("f.
txt","r"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp)){fscanf(fp,"%ld%s%d",&num,stname,&score);printf("%ld%s%d\n",num,stname,score);};if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}}12.
2.
1程序解析#include"stdio.
h"intmain(void){FILE*fp;/*定义文件指针*/longnum;charstname[20];intscore;if((fp=fopen("f.
txt","r"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp)){fscanf(fp,"%ld%s%d",&num,stname,&score);printf("%ld%s%d\n",num,stname,score);};if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}}fopen("文件名字符串","打开方式字符串")使文件指针与相应文件实体对应起来程序对文件指针进行操作,即fp代表磁盘文件函数fopen()的返回值执行成功,则返回包含文件缓冲区等信息的FILE型地址,赋给文件指针fp不成功,则返回一个NULL(空值)exit(0):关闭所有打开的文件,并终止程序的执行参数0表示程序正常结束;非0参数通常表示不正常的程序结束文件打开方式fp=fopen("f.
txt","r")文件打开方式参数表文件读写与打开方式if读文件指定的文件必须存在,否则出错;if写文件(指定的文件可以存在,也可以不存在)if以"w"方式写if该文件已经存在原文件将被删去重新建立;else按指定的名字新建一个文件;elseif以"a"方式写if该文件已经存在写入的数据将被添加到指定文件原有数据的后面,不会删去原来的内容;else按指定的名字新建一个文件(与"w"相同);if文件同时读和写使用"r+"、"w+"或"a+"打开文件12.
2.
1程序解析#include"stdio.
h"intmain(void){FILE*fp;/*定义文件指针*/longnum;charstname[20];intscore;if((fp=fopen("f.
txt","r"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp)){fscanf(fp,"%ld%s%d",&num,stname,&score);printf("%ld%s%d\n",num,stname,score);};if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}}12.
2.
3关闭文件if(fclose(fp)){printf("Cannotclosethefile!
\n");exit(0);}fclose(文件指针)把缓冲区中的数据写入磁盘扇区,确保写文件的正常完成释放文件缓冲区单元和FILE结构体,使文件指针与具体文件脱钩.
函数fclose()的返回值返回0:正常关闭文件返回非0:无法正常关闭文件12.
3文件复制例12-3已知一个文本数据文件f1.
txt,请将该文件复制一份,保存为f2.
txt.
新建一个文本文件f1.
txt,将该文件与源程序放在同一目录下,执行程序,观察结果.
例12-3源程序#includeintmain(void){FILE*fp1,*fp2;charc;if((fp1=fopen("f1.
dat","r"))==NULL){printf("Fileopenerror!
\n");exit(0);}if((fp2=fopen("f2.
dat","w"))==NULL){printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp1)){c=fgetc(fp1);fputc(c,fp2);}fclose(fp1);fclose(fp2);return0;}打开多个文件if((fp1=fopen(f1.
dat,"r"))==NULL){printf("Fileopenerror!
\n");exit(0);}if((fp2=fopen("f2.
dat","w"))==NULL){printf("Fileopenerror!
\n");exit(0);}C语言允许同时打开多个文件不同的文件对应不同的文件指针不允许同一个文件在关闭前再次打开文件读写函数字符读写函数:fgetc/fputc字符串读写函数:fputs/fgets格式化读写函数:fscanf/fprintf二进制读写函数:fread/fwrite其他相关函数:检测文件结尾函数feof检测文件读写出错函数ferror清除末尾标志和出错标志函数clearerr文件定位的函数fseek12.
3.
2字符读写函数fgetc和fputcwhile(!
feof(fp1)){c=fgetc(fp1);fputc(c,fp2);}函数fputc()fputc(ch,fp);把一个字符ch写到fp所指示的磁盘文件上返回值-1(EOF):写文件失败ch:写文件成功字符读写函数fgetc和fputc函数fgetc()ch=fgetc(fp);从fp所指示的磁盘文件上读入一个字符到ch区分键盘字符输入函数getchar()从键盘输入10个字符,写到文件f2.
txt中,再重新读出,并在屏幕上显示验证.
键盘输入写入文件f2.
txt读文件屏幕显示的过程键盘输入f2.
txt时,文件按写方式打开.
f2.
txt显示到屏幕时,文件按读方式打开.
读和写是两种不同的操作,f2.
txt分别被打开和关闭两次.
例12-4源程序intmain(void){inti;charch;FILE*fp;if((fp=fopen("f2.
txt","w"))==NULL){/*打开文件f2.
txt*/printf("Fileopenerror!
\n");exit(0);}for(i=0;i0){/*表示有记录存在*/fseek(cfptr,size*(logcount-1),SEEK_SET);/*定位最后记录*/fread(&log,size,1,cfptr);/*读取最后记录*/printf("Thelastlogis:\n");printf("logid:%-6ld\nlogdate:%-11s\nlognote:%-15s\n",log.
logid,log.
logdate,log.
lognote);printf("charge:%-10.
2lf\nbalance:%-10.
2lf\n",log.
charge,log.
balance);}elseprintf("nologsinfile!
\n");}增加日志voidAddNewLog(FILE*cfptr)/*添加新记录*/{structLogDatalog,lastlog;longlogcount;printf("Inputlogdate(format:2006-01-01):");scanf("%s",log.
logdate);printf("Inputlognote:");scanf("%s",log.
lognote);printf("InputCharge:Income+andexpend-:");scanf("%lf",&log.
charge);logcount=getLogcount(cfptr);/*获取记录数*/增加日志if(logcount>0){fseek(cfptr,size*(logcount-1),SEEK_SET);fread(&lastlog,size,1,cfptr);/*读入最后记录*/log.
logid=lastlog.
logid+1;/*记录号按顺序是上次的号+1*/log.
balance=log.
charge+lastlog.
balance;}else{/*如果文件是初始,记录数为0*/log.
logid=1;log.
balance=log.
charge;}fseek(cfptr,0L,SEEK_END);/*rewind(cfptr);*/printf("logid=%ld\n",log.
logid);fwrite(&log,sizeof(structLogData),1,cfptr);/*写入记录*/}计算日志个数longgetLogcount(FILE*cfptr)/*获取文件记录总数*/{longbegin,end,logcount;fseek(cfptr,0L,SEEK_SET);begin=ftell(cfptr);fseek(cfptr,0L,SEEK_END);end=ftell(cfptr);logcount=(end-begin)/size;returnlogcount;}Anymoreoperations修改一条日志统计支出统计收入

Gigsgigscloud($9.8)联通用户优选日本软银VPS

gigsgigsCloud日本东京软银VPS的大带宽配置有100Mbps、150Mbps和200Mbps三种,三网都走软银直连,售价最低9.8美元/月、年付98美元。gigsgigscloud带宽较大延迟低,联通用户的好选择!Gigsgigscloud 日本软银(BBTEC, SoftBank)线路,在速度/延迟/价格方面,是目前联通用户海外VPS的最佳选择,与美国VPS想比,日本软银VPS延迟更...

亚州云-美国Care云服务器,618大带宽美国Care年付云活动服务器,采用KVM架构,支持3天免费无理由退款!

官方网站:点击访问亚州云活动官网活动方案:地区:美国CERA(联通)CPU:1核(可加)内存:1G(可加)硬盘:40G系统盘+20G数据盘架构:KVM流量:无限制带宽:100Mbps(可加)IPv4:1个价格:¥128/年(年付为4折)购买:直达订购链接测试IP:45.145.7.3Tips:不满意三天无理由退回充值账户!地区:枣庄电信高防防御:100GCPU:8核(可加)内存:4G(可加)硬盘:...

OneTechCloud香港/日本/美国CN2 GIA月付9折季付8折,可选原生IP或高防VPS

OneTechCloud(易科云)是一家主打CN2等高端线路的VPS主机商家,成立于2019年,提供的产品包括VPS主机和独立服务器租用等,数据中心可选美国洛杉矶、中国香港、日本等,有CN2 GIA线路、AS9929、高防、原生IP等。目前商家针对全场VPS主机提供月付9折,季付8折优惠码,优惠后香港VPS最低季付64元起(≈21.3元/月),美国洛杉矶CN2 GIA线路+20Gbps防御型VPS...

缓存文件写入失败为你推荐
邮箱怎么写工作邮箱怎么填flash导航条flash导航条swf格式的要怎么编辑bluestacksbluestacks怎么用百度手写百度手写怎么不见了开机滚动条谁会调开机的滚动条神雕侠侣礼包大全神雕侠侣先手礼包在哪领安全漏洞web安全漏洞有哪些宽带接入服务器宽带接入服务器的五大功能是什么?gbk编码表GB GBK utf8码的区别三星s8什么时候上市大约什么时候买S8合适
域名主机空间 看国外视频直播vps 工信部域名备案系统 漂亮qq空间 国外idc 香港主机 正版win8.1升级win10 网站挂马检测工具 全站静态化 183是联通还是移动 umax120 如何用qq邮箱发邮件 主机管理系统 中国联通宽带测速 广州主机托管 服务器防御 脚本大全 删除域名 cc加速器 在线tracert 更多