C语言第9章人民邮电出版社张小东_第1页
C语言第9章人民邮电出版社张小东_第2页
C语言第9章人民邮电出版社张小东_第3页
C语言第9章人民邮电出版社张小东_第4页
C语言第9章人民邮电出版社张小东_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

存储设备第九章数据的永久性存储内部存储设备外部部存储设备C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第1页!9.1数据的永久性存储文件是永久性存储设备的最基本存储单位。文件能够大量的、永久性的保存数据信息,并能够通过各种文件操作功能来管理和使用这些数据。文件概念:文件是指存储在永久性存储设备上的具有名字(文件名)的一组相关数据的集合,通常也被称为磁盘文件。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第2页!9.2文件的组织方式根据编码方式,文件可以分为两种:一种是文本文件(ASCII码文件),另一种是二进制文件。通过C语言编程实现对文件的访问时,必须要严格按照文件原有的编码方式及文件存储格式来对文件进行访问操作,才能正确读写文件数据。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第3页!9.3文件的操作文件操作主要包括读文件和写文件等。读文件是指从文件中把数据信息读入内存中,以供程序调用;写文件是指把内存中的数据信息输出到永久性存储设备上的文件中,起到保存数据和实现数据共享的功能。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第4页!9.3文件的操作C语言的文件操作编程时,用FILE来定义一个文件结构体类型指针变量(通常称为文件指针),用来指向被访问的文件并通过该文件指针变量来访问文件信息。文件指针定义形式:9.3.1stdio.hFILE*fp; /*定义文件结构体类型指针变量*/上面的C程序语句定义了一个文件指针fp,但fp指向哪个文件,目前并不知道,只有通过文件打开函数让fp指向某个指定文件,将fp与该文件关联起来,才能使用fp。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第5页!9.3文件的操作stdio.h中关于文件的宏定义9.3.1stdio.h#defineSEEK_SET 0 /*表征文件头位置*/#defineSEEK_CUR 1 /*表征文件位置指针当前所处位置*/#defineSEEK_END 2 /*表征文件尾位置*/#defineEOF

-1/*文件结束标识宏常量*/C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第6页!9.3文件的操作9.3.2文件的打开与关闭(1)文件打开函数fopen()原型:FILE*fopen(constchar*filename,constchar*mode);头文件:#include<stdio.h>功能:以指定方式打开所指定的文件参数:filename—文件路径加文件名,mode—文件打开方式返回值:若打开文件成功,则返回文件指针值;否则,返回NULL(2)文件关闭函数fclose()原型:int

fclose(FILE*stream);头文件:#include<stdio.h>功能:关闭文件参数:stream—文件指针返回值:若关闭文件成功,则返回0;否则,返回EOFC语言第9章人民邮电出版社张小东共41页,您现在浏览的是第7页!9.3文件的操作9.3.2文件的打开与关闭关于文件的打开方式文本文件二进制文件rrbwwbaabr+rb+或r+bw+wb+或w+ba+ab+或a+bC语言第9章人民邮电出版社张小东共41页,您现在浏览的是第8页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数文件结束标识测试函数feof()原型:int

feof(FILE*stream);头文件:#include<stdio.h>功能:文件结束标识符测试参数:stream—文件指针返回值:若文件内部读写位置指针正指向文件尾,则返回非0值;否则,返回0值if(!feof(fp)) /*如果没有遇到文件尾则执行操作*/{ …… /*文件读写操作代码*/}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第9页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数字符读/写函数fgetc()和fputc()原型:int

fgetc(FILE*stream);头文件:#include<stdio.h>功能:从文件中读入一个字符参数:stream—文件指针返回值:成功执行则返回所读取字符(字节)的整数值;否则,返回EOF原型:int

fputc(intch,FILE*stream);头文件:#include<stdio.h>功能:把字符ch写入到文件中参数:ch—字符,stream—文件指针返回值:成功执行则返回所写入字符的整数值;否则,返回EOFch=fgetc(fp);/*从fp所指向的文件流读取一个字符,并赋给字符变量ch*/fputc(ch,fp); /*把字符ch写入到文件中*/C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第10页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数格式化读/写函数fscanf()和fprintf()原型:int

fscanf(FILE*stream,const

char*format,…);头文件:#include<stdio.h>功能:文件格式化读取参数:stream—文件指针,format—格式控制字符串,…—可变数目变量列表返回值:成功执行则返回所读取的字节数;否则,返回EOF原型:int

fprintf(FILE*stream,const

char*format,…);头文件:#include<stdio.h>功能:文件格式化输出参数:stream—文件指针,format—格式控制字符串,…—可变数目变量列表返回值:成功执行则返回所写入的字节数;否则,返回一负数值C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第11页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数例9-1编程实现把文本文件hit.txt另存为新文本文件hit_new.txt。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第12页!#include<stdio.h>#include<stdlib.h>void

main(void){

FILE*fp,*fpNew;

intnCh,nResult; fp=fopen("hit.txt","r"); /*以只读方式打开文件hit.txt*/

if(NULL==fp) {

printf("Openfilehit.txterror\n");

exit(-1); } fpNew=fopen("hit_new.txt","w"); /*创建hit_new.txt并以只写方式打开*/

if(NULL==fpNew) {

printf("Createfilehit_new.txterror\n");

exit(-1); }

while(!feof(fp)) /*未遇到文件尾时循环读写操作*/ { nCh=fgetc(fp); /*从文件hit.txt读取字符*/

if(EOF!=nCh) { nResult=fputc(nCh,fpNew);/*把字符写到文件hit_new.txt中*/ if(EOF==nResult) {

printf("Writecharactertohit_new.txterror\n");

exit(-1); }

putchar(nCh); } }

fclose(fp);

fclose(fpNew);

printf("\nFilesaveassuccessfully!\n");}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第13页!C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第14页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数例9-3从键盘分别输入整数、浮点数、字符、字符串各一个,要求把这些数据按照键盘输入时的格式写到文件hit.txt中,然后从文件中把这些数据按原有格式读入并显示到屏幕上。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第15页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数例9-4现有内容为“The2008BeijingOlympicGamesweretrulyexceptionalGames!”(共60个字符,包括空格字符在内)的文本文件hit.txt,将其加密成一个二进制文件hit.bin。加密算法是把从文件中读出的所有字符按其在文件中的排列顺序依次加上数值0~59。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第16页!#include<stdio.h>void

main(void){

FILE*stream;

charlist[80];

inti,NumRead,NumWritten;

if((stream=fopen("hit.txt","r"))!=NULL) /*打开文件*/ { NumRead=fread(list,sizeof(char),60,stream); /*从文件中读取60个字符*/

printf("Numberofitemsread=%d\n",NumRead);/*输出所读取的字符数*/

printf("Contentsofbuffer=%.60s\n",list); /*输出所读取的字符块*/

fclose(stream); }

else

printf("Filecouldnotbeopened\n");

if((stream=fopen("hit.bin","wb"))!=NULL) /*创建新的二进制文件*/ { for(i=0;i<60;i++) list[i]=(char)(list[i]+i); /*通过字符运算进行简单加密*/ NumWritten=fwrite(list,sizeof(char),60,stream);/*把加密后的字符块写入文件中*/

printf("Wrote%ditems\n",NumWritten); /*输出已写入文件的字符数*/

fclose(stream); }

else

printf("Filecouldnotbeopened\n");}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第17页!9.3文件的操作9.3.4文件定位函数函数rewind()原型:void

rewind(FILE*stream);头文件:#include<stdio.h>功能:把文件内部读写位置指针无条件的重新指向文件头位置参数:stream—文件指针返回值:无返回值C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第18页!9.3文件的操作9.3.4文件定位函数函数ftell()原型:longint

ftell(FILE*stream);头文件:#include<stdio.h>功能:返回文件内部读写位置指针当前指向位置参数:stream—文件指针返回值:成功执行则返回当前位置距离文件头的偏移量(字节数);否则返回-1LC语言第9章人民邮电出版社张小东共41页,您现在浏览的是第19页!#include<stdio.h>void

main(void){

FILE*stream;

longintlnFileSize;

if((stream=fopen("hit.bin","rb"))!=NULL) {

fseek(stream,0L,SEEK_END);/*文件内部读写位置指针指向文件尾*/ lnFileSize=ftell(stream);/*求文件尾到文件头的偏移量即文件大小*/

printf("Thefilesizeofhit.binis%ldbytes\n",lnFileSize);

fclose(stream); }

else

printf("Filecouldnotbeopened\n");}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第20页!原型:int

ReadStuInfo(char*filename,char*mode,STUDENT*stu,intnum);功能:从文件中读取学生成绩信息参数:filename—文件名,mode—文件打开方式,stu—学生结构体数组,num—记录数返回值:执行成功则返回实际读入的记录数,否则返回-1原型:int

WriteStuInfo(char*filename,char*mode,STUDENT*stu,intnum);功能:把学生成绩信息写入到文件中参数:filename—文件名,mode—文件打开方式,stu—学生结构体数组,num—记录数返回值:执行成功则返回实际写入的记录数,否则返回-1(1)读取学生信息的子函数ReadStuInfo() (2)把中间操作结果写入到文件中的子函数WriteStuInfo()C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第21页!int

WriteStuInfo(char*filename,char*mode,STUDENT*stu,intnum){

FILE*fp;

intnNumWritten,nRes; fp=fopen(filename,mode);

if(NULL!=fp) { /*以数据块形式写入成绩记录*/ nNumWritten=fwrite((void*)stu,sizeof(STUDENT),num,fp);

if(ferror(fp)) /*错误处理*/ {

printf("Writingerror!\n"); nRes=-1; }

else {

printf("Written%drecordssuccessfully!\n",nNumWritten); nRes=nNumWritten; /*以成功写入的记录数*/ }

fclose(fp); }

else {

printf("Can'topenthestudentinformationfile,pleasetryagain!\n"); nRes=-1; }

returnnRes;}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第22页!9.3文件的操作头文件stdio.h定义了文件结构体类型FILE,用来保存文件的文件名、文件的状态和文件当前的读写位置等相关文件信息。9.3.1stdio.htypedef

struct

{

short level; /*缓冲区‘满’或‘空’的程度*/

unsigned flags; /*文件状态标志*/

char fd; /*文件描述符*/

unsignedchar hold; /*如无缓冲区不读字符*/

short bsize; /*缓冲区的大小*/

unsignedchar *buffer; /*数据缓冲区的位置*/

unsignedchar *curp; /*文件内位置指针当前的指向*/

unsigned istemp; /*临时文件指示器*/

short token; /*用于有效性检查*/}FILE;C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第23页!9.3文件的操作C语言是以文件流的形式来对文件进行访问操作的。为了便于对文件流的顺序访问和随机定位访问,在文件内部还有一个位置指针来指向文件的当前读写操作位置,这就是文件结构体FILE中的成员指针变量curp。9.3.1stdio.hC语言第9章人民邮电出版社张小东共41页,您现在浏览的是第24页!9.3文件的操作stdio.h中关于文件的常用函数9.3.1stdio.h函数名功能说明函数名功能说明fopen()打开文件流fscanf()从文件流中按格式读取数据fclose()关闭文件流fprintf()把数据按格式输出到文件流feof()文件结束标识测试fread()从文件流中读取指定大小的数据块ferror()文件访问错误测试fwrite()向文件流中写入指定大小的数据块fgetc()从文件流中读取(输入)一个字符rewind()文件内部读写位置指针复位到文件头fputc()写入(输出)一个字符到文件流中fseek()文件内部读写位置指针置为特定位置fgets()从文件流中读一行或指定长度字符串ftell()返回文件内部读写位置指针当前位置fputs()写字符串到文件流中C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第25页!9.3文件的操作9.3.2文件的打开与关闭……FILE*fp,*fpBinary;fp=fopen(“c:\\zwg\\zwg.txt","r"); /*以只读方式打开文本文件*/if(NULL==fp){

printf("Opentextfile'zwg.txt'error!");

exit(-1);}fpBinary=fopen(“c:\\zwg\\zwg.bin","rb+");/*以读/写方式打开二进制文件*/if(NULL==fpBinary){

printf("Openbinaryfile'zwg.bin'error!");

exit(-1);}…… /*此处可放置若干文件操作代码*/fclose(fp);

/*关闭文件指针fp所指向的文件*/fclose(fpBinary);

/*关闭文件指针fpBinary所指向的文件*/……

C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第26页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数文件结束标识测试函数feof()文件操作错误测试函数ferror()字符读/写函数fgetc()和fputc()字符串读/写函数fgets()和fputs()格式化读/写函数fscanf()和fprintf()数据块读/写函数fread()和fwrite()C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第27页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数文件操作错误测试函数ferror()原型:int

ferror(FILE*stream);头文件:#include<stdio.h>功能:文件操作错误测试参数:stream—文件指针返回值:若出现错误,则返回非0值;否则,返回0值if(ferror(fp))

/*如果文件读或写出错*/{

……

/*文件读写错误处理程序代码*/}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第28页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数字符串读/写函数fgets()和fputs()原型:char*fgets(char*s,intn,FILE*stream);头文件:#include<stdio.h>功能:从文件中读入一个长度为n-1的字符串参数:s—字符串,n—要读入的字符串总长度(空字符计算在内),stream—文件指针返回值:返回字符指针s的值原型:int

fputs(char*s,FILE*stream);头文件:#include<stdio.h>功能:把字符串s写入到文件中参数:s—字符串,stream—文件指针返回值:成功执行则返回一个非负整数值;否则,返回EOFC语言第9章人民邮电出版社张小东共41页,您现在浏览的是第29页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数数据块读/写函数fread()和fwrite()原型:size_t

fread(void*buffer,size_tsize,size_tcount,FILE*stream);头文件:#include<stdio.h>功能:读取文件数据块参数:buffer—数据存储区指针,size—数据项字节数,count—数据项数,stream—文件指针返回值:返回实际读取的数据项数原型:size_t

fwrite(void*buffer,size_tsize,size_tcount,FILE*stream);头文件:#include<stdio.h>功能:写数据块到文件中参数:buffer—数据存储区指针,size—数据项字节数,count—数据项数,stream—文件指针返回值:成功执行,则返回值等于count;若返回值小于count,则说明写数据库出错C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第30页!C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第31页!9.3文件的操作9.3.3文件读/写函数及与读写相关的函数例9-2把从键盘输入的一个字符串写到文件hit.txt中,再从文件中把该字符串读出来显示到屏幕上。C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第32页!#include<stdio.h>#include<stdlib.h>#include<string.h>void

main(void){

FILE*fp;

charstr[81],strNew[81],*pCh;

intnResult,nLen;

fp=fopen("hit.txt","w+"); /*创建文件hit.txt并打开*/

if(NULL==fp) {

printf("Openfilehit.txterror\n");

exit(-1); }

gets(str); /*获取键盘输入字符串*/ nLen=strlen(str); /*计算字符串长度*/ nResult=fputs(str,fp); /*把字符串写入文件中*/

if(EOF==nResult) {

printf("Writestringtohit.txterror\n");

exit(-1); }

printf("Writestringtofilepletely\n");

fclose(fp);

fp=fopen("hit.txt","r"); /*以只读方式重新打开hit.txt*/

if(NULL==fp) {

printf("Openfilehit.txterror\n");

exit(-1); } pCh=fgets(strNew,nLen+1,fp); /*从文件中读取字符串*/

if(NULL==pCh) {

printf("Readstringfromhit.txterror\n");

exit(-1); }

puts(pCh); /*输出字符串到屏幕,此处也可把pCh替换成strNew*/

fclose(fp);}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第33页!#include<stdio.h>#include<stdlib.h>#include<string.h>void

main(void){

FILE*fp;

int nNum,nResult;

floatfData;

charch,str[30];

printf("Pleaseinputaninteger,afloat,acharandastringlikethis:\n");

printf("2008,8.08,B,Olympic\n\n");

scanf("%d,%f,%c,%s",&nNum,&fData,&ch,str);/*从键盘格式化输入数据*/ fp=fopen("hit.txt","w+"); /*新建文本文件*/

if(NULL==fp){

printf("Openfilehit.txterror\n");

exit(-1); }

nResult=fprintf(fp,"%d,%.2f,%c,%s",nNum,fData,ch,str);/*格式化写入文件*/

if(nResult<0) {

printf("Writeformatteddatatohit.txterror\n");

exit(-1); }

printf("Writeformatteddatatofilepletely\n"); nNum=0; /*清空各变量*/ fData=0.0; ch='\0';

strcpy(str,"");

fseek(fp,0L,SEEK_SET); /*把文件内部读写位置指针重新定位到文件头*/

nResult=fscanf(fp,"%d,%f,%c,%s",&nNum,&fData,&ch,str);/*从文件格式化读入数据*/

if(EOF==nResult) {

printf("Readformatteddatafromhit.txterror\n");

exit(-1); }

printf("%d,%.2f,%c,%s\n",nNum,fData,ch,str);

fclose(fp);}C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第34页!C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第35页!9.3文件的操作9.3.4文件定位函数函数rewind()函数fseek()函数ftell()C语言第9章人民邮电出版社张小东共41页,您现在浏览的是第36页!9.3文件的操作9.3.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论