初中教育c语言C8文件201011120更新_第1页
初中教育c语言C8文件201011120更新_第2页
初中教育c语言C8文件201011120更新_第3页
初中教育c语言C8文件201011120更新_第4页
初中教育c语言C8文件201011120更新_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章第八章文件文件 2020/4/112 8.1 C 语言文件概述 8.2 缓冲文件输入输出系统 退出 2020/4/113 8.1 C语言文件概述 语言文件概述 文件:把数据组织起来而构成的数据集合体,是操 作系统数据管理的单位。 2020/4/114 ?文件分类文件分类 ?按存储介质 普通文件普通文件:存储介质文件(磁盘、磁带等)。 设备文件设备文件:非存储介质(键盘、显示器、打印机等)。 ?按文件内部编码方式 ASCII文件 文件(文本文件、文本文件、 TEXT文件 文件):每个字节存放 ASCII码,表示一个字符。 例如源程序文件就是 ASCII文件,用DOS命令TYPE可 以显示文

2、件的内容。 二进制文件二进制文件:数据按其在内存中的存储形式原样存放。 2020/4/115 例:整数10000的存储。 内存存储形式 二进制形式 ASCII形式 00100111 00010000 00100111 00010000 00110001 00110000 00110000 00110000 00110000 文本文件特点: 存储量大,转换为二进制速度慢,直观易记。 二进制文件特点: 存储量小,无需转换。但因一个字节不对应一 个字符,故不能直接输出其字符形式。 2020/4/116 ?文件分类文件分类 ?按存储介质 普通文件普通文件:存储介质文件(磁盘、磁带等)。 设备文件设备文

3、件:非存储介质(键盘、显示器、打印机等)。 ?按文件内部编码方式 ASCII文 文件件(文文本本文文件件、TEXT文文件件):每个字节存放 ASCII码,表示一个字符。 例如源程序文件就是ASCII文件,用DOS命令TYPE可以 显示文件的内容。 二进制文件二进制文件:数据按其在内存中的存储形式原样存放。 ?按文件的逻辑结构 记录文件记录文件:由具有一定结构的记录组成(定长和不定长)。 流式文件流式文件:由一个个字符(字节)数据顺序组成。C把文件 一律都看成是“字节流”。 2020/4/117 ?文件系统:文件系统:缓冲文件系统、非缓冲文件系统 ?缓冲文件系统 (高级文件系统): :系统自动为

4、正 在使用的文件开辟内存缓冲区。 ?非缓冲文件系统 (低级文件系统): :由用户在程 序中为每个文件设定缓冲区。 返回 磁盘文件磁盘文件 输出文件 缓冲区 程序数据区 a 缓 冲 文 件 系 统 输入文件 缓冲区 程序 缓冲区 指令区 用户数据区 非 缓 冲 文 件 系 统 磁盘文件 2020/4/118 缓冲文件输入输出系统 (高级磁盘输入输出系统, 高级I/O):用缓冲文件系统进行的输入输出。:用缓冲文件系统进行的输入输出。 8.2.1 文件类型结构及文件指针 8.2.2 文件的打开与关闭 8.2.3 文件的读写 8.2.4 文件的定位 8.2.5 出错的检测 8.2 缓冲文件输入输出系统

5、缓冲文件输入输出系统 返回 2020/4/119 8.2.1 文件类型结构及文件指针 C为每个文件在 内存中开辟一个区域,存放文件的有 关信息,包括文件名、文件状态、文件当前位置等。 这个区域被作成一个 FILE类型的结构体。FILE类型 由系统定义,保存在头文件 stdio.h 中。 C通过指向这个结构体的 指针(文件指针)访问文件。 C程序 操作系统 文件名+文件使用方式 文件类型指针 磁盘文件 2020/4/1110 复习复习 第七章 指针 7.4.3 指向函数的指针 7.4.4 命令行参数 第八章 文件 8.1 C 语言文件概述 8.2 缓冲文件输入输出系统 8.2.1 文件类型结构及

6、文件指针 2020/4/1111 文件指针定义:文件指针定义: FILE *文件结构指针名 文件结构指针名; ?标记 即文件读写位置指针 ,总是指向文件中将要操作 的字节。 ?文件相关常量 ?EOF:值为“-1” 。一般表示文件结束,或文件 操作出错。 ?NULL:值为“ 0 ” 。一般表示打开文件失败等。 ?文件操作 ?文件操作函数库的头文件是 獜摴潩栮。 ?任何高级语言,对文件操作都应该遵循: 打开文件操作文件关闭文件 返回 2020/4/1112 8.2.2 文件的打开与关闭文件的打开与关闭 ?文件打开时,系统自动建立文件结构体。 ?文件关闭后,文件的结构体被释放。 系统自动打开和关闭的

7、五个 标准设备文件: 文件号 文件指针标准文件 0stdin 标准输入(键盘) 1stdout 标准输出(显示器) 2stderr 标准错误(显示器) 3stdaux 标准辅助(辅助设备端口) 4stdprn 标准打印(打印机) 2020/4/1113 (1) 文件打开fopen ?函数首部:FILE *fopen(char *filename,char *mode) ?功能:按指定方式打开文件。 ?返回值:正常打开时为指向文件结构体的指针;打 开失败时为NULL。 文件使用方式含义 /rb( 只读)为输入打开一个(已存在的)文本/二进制文件 w/wb( 只写)为输出建立一个文本/二进制文件

8、a/ab( 追加)向文本/二进制文件尾追加或建立并追加数据 +/rb+( 读写)为读/写打开一个(已存在的)文本/二进制文件 w+/wb+( 读写)为读/写建立一个文本/二进制文件 a+/ab+( 读写)为读/写打开或建立一个文本/二进制文件 2020/4/1114 例:例:文件打开与测试。文件打开与测试。 FILE *fp; if( fp=fopen( ilename, b+) )=NULL) printf(Cant open this file.n); exit(0); 例:例:FILE *fp; fp=fopen( 晜汩晜汩?硴屴硴屴 ,牜 牜 ); 2020/4/1115 (2) 文件

9、关闭fclose ?函数首部:intfclose(FILE*fp) ?功能:关闭fp指向的文件,释放文件结构体。 ?返回值:正常为0 ,出错为非0 。 返回 磁盘文件 输出文件 缓冲区 程序数据区 a 缓 冲 文 件 系 统 输入文件 缓冲区 fclose 不关闭文件可能会丢失数据 2020/4/1116 (1) 字符输入/输出 字符输入:fgetc ?函数原型:intfgetc(FILE*fp) ?功能:从fp指向的文件中读取一个字符。 ?返回值 :正常,为读取的字符;读到文件尾或 出错时,为EOF。 字符输出:fputc ?函数原型:intfputc(int ch,FILE *fp) ?功

10、能:把一字符ch写入fp指向的文件中。 ?返回值:正常,返回ch;出错,为EOF。 8.2.3 文件的读写 2020/4/1117 系统进行了如下宏定义: 文件I/O: #define putc(ch,fp) fputc(ch,fp) #define getc(fp) fgetc(fp) 终端I/O: #define putchar(ch) fputc(ch,stdout) #define getchar() fgetc(stdin) 2020/4/1118 例例8.1从键盘输入一些字符,逐个把它们保存到磁 盘文件中,直到输入“ #” 结束。 #include main() charch,fi

11、lename20; FILE *fp; clrscr(); printf(Pleaseinputthefilename:); gets(filename); if(fp=fopen(filename,w)=NULL) printf(Cannotopenthisfile.n); exit(0); printf(Pleaseinputthestring:n); while(ch=getchar()!=#) fputc(ch,fp); putchar(ch); fclose(fp); 2020/4/1119 文件结束:feof ?函数原型:intfeof(FILE*fp) ?功能:判断文件是否结束。

12、 ?返回值:文件结束,返回“真”;文件未结束, 返回“假”。 2020/4/1120 例例8.2将一个磁盘文件中的信息复制到另一个磁盘文件中, 两个文件名由命令行参数给出。 #include main(argc,argv) intargc; char *argv; intch; FILE *fpr,*fpw; clrscr(); if(argc!=3) printf(Youforgottoenter afilename.n); exit(0); if( fpr=fopen(argv2, ) )=NULL) printf(File %s cannot open.n,argv2); exit(0)

13、; if(fpw=fopen(argv1,w) )=NULL) printf(FILE %s cannot open.n,argv1); exit(0); while( ch=fgetc(fpr)!=EOF)fputc(ch,fpw); fclose(fpr); fclose(fpw); 牜屢 睜屢 while(! feof(fpr) ) fputc(fgetc(fpr),fpw); 2020/4/1121 (2) 字符串输入/输出 字符串输入:fgets ?函数首部:char*fgets(char *str,int length,FILE*fp); ?功能:从fp所指向的文件中,至多读 le

14、ngth-1 个字符, 送入字符数组 str中,如果在读入length-1 个字符结束 前遇换行符或 EOF,读入即结束,字符串读入后在 最后加一个0字符。 ?返回值:正常,返回str指针;出错,返回 NULL。 字符串输出:fputs ?函数首部:intfputs(char *str,FILE*fp); ?功能:把str指向的字符串写入 fp指向的文件。 ?返回值:正常,返回0;出错,返回EOF。 2020/4/1122 例例8.3读取文本文件的内容,并加上行号显示。 #include #define SIZE256 main(int argc,char *argv) char sSIZE;

15、 intc,line; FILE *fp; clrscr(); if(argc2) printf(Youforgot toenter afilemane.n); exit(0); if( fp=fopen(argv1, ) )=NULL) printf(File %s cannot open.n,argv1); exit(0); line=1; while( fgets(s,SIZE,fp)!=NULL) printf(Mt%sn,line+,s); fclose(fp); 2020/4/1123 (3) 字段输入fread /输出fwrite ?函数首部: intfread(void *bu

16、ffer,int num_bytes,int count,FILE*fp); intfwrite(void *buffer,int num_bytes,int count,FILE*fp); ?功能:读/写数据块。 ?返回值 :成功,返回读 / 写的数据块数;出错或文件结 束,返回0。 ?说明: buffer :指向要输入/输出数据存储区首址的指针。 num_bytes :每个要读/写的数据块的字节数。 count :要读/写的数据块的个数。 fp:要读/ 写的文件指针。 fread 与fwrite一般用于二进制文件的输入/输出。 2020/4/1124 例:float f2; FILE *f

17、p; fp=fopen(aa.dat, b); fread(f,4,2,fp); 例:structstudent intnum; char name20; charsex; intage; float score3; stud10; for(i=0;i10;i+) fread( for(i=0;i2;i+) fread( 2020/4/1125 例8.4从键盘输入3个学生数据,再转存到磁盘文件。 #include #define SIZE3 struct student_type charname10; intnum; intage; charaddr15; studSIZE; voidsav

18、e(); voiddisplay(); main() inti; clrscr(); for(i=0;iSIZE;i+) scanf(%s%d%d%s,, save(); display(); 2020/4/1126 voidsave() FILE *fp; inti; if(fp=fopen(stu_list,wb)=NULL) printf(Cannotopenfile.n); exit(0); for(i=0;iSIZE;i+) if(fwrite( fclose(fp); 2020/4/1127 voiddisplay() FILE *fp; inti; if( (

19、fp=fopen(stu_list, b)=NULL ) printf(Cannotopenfile.n); exit(0); for(i=0;iSIZE;i+) fread( printf(%-10sMM%-15sn,, studi.num,studi.age,studi.addr); fclose(fp); 2020/4/1128 复习复习 第八章 文件 8.2 缓冲文件输入输出系统 8.2.1 文件类型结构及文件指针 文件指针定义:FILE *文件结构指针名; 8.2.2 文件的打开与关闭 fopen, fclose 8.2.3 文件的读写 fgetc, fputc,

20、 feof, fgets, fputs, fread, fwrite 2020/4/1129 (4) 格式化输入fscanf /输出fprintf ?函数首部: intfscanf(FILE*fp,char *format,arg_list); intfprintf(FILE*fp,char*format,arg_list); ?功能:按format格式对fp指向文件进行I/O操作。 ?返回值:成功,返回I/O个数;出错或文件结束, 返回EOF。 例:fscanf(fp,%d%f, /* 若文件中有“3 4.5” ,则将3 送入i,4.5 送入t*/ fprintf(fp,%d,%f,i,t)

21、; /* 将i和t按%d,%f 格式输出到fp文件*/ 2020/4/1130 例8.5从键盘按格式输入数据存到磁盘文件中去, 并回显到屏幕上。 #include main() char s80,c80; inta,b; FILE *fp; clrscr(); if(fp=fopen( est,w)=NULL ) puts(Cantopenfile.); exit(); fscanf(stdin,%s%d,s,/* 键盘输入*/ fprintf(fp,%s %d,s,a) ;/* 写入文件*/ fclose(fp); if( (fp=fopen( est, )=NULL ) puts(Cant

22、openfile.); exit(); fscanf(fp,%s%d,c,/* 从文件读出*/ fprintf(stdout,%s%d,c,b);/* 屏幕显示*/ fclose(fp); 返回 2020/4/1131 文件位置指针(标记):指向文件当前读写位置。 读写方式: ?顺序读写:位置指针按字节位置顺序移动。 ?随机读写:位置指针按需要移动到任意位置。 (1) rewind 函数 函数首部:voidrewind(FILE*fp); 功能:使fp所指文件的位置指针重置到文件开头。 返回值:无。 8.2.4 文件的定位 2020/4/1132 例8.6对一个磁盘文件分别进行显示和复制操作。

23、对一个磁盘文件分别进行显示和复制操作。 #include main() FILE *fp1,*fp2; clrscr(); fp1= fopen( ile1.c, ) ; fp2 =fopen( ile2.c,w) ; while(!feof(fp1) putchar(getc(fp1); rewind(fp1); while(!feof(fp1) putc(getc(fp1),fp2); fclose(fp1); fclose(fp2); 2020/4/1133 (2) fseek函数 函数原型:int fseek(FILE *fp,long offset,int origin); 功能:改

24、变文件位置指针的位置,向后移超界时指 向最后一个字节,向前移超界时指向第一个字节。 返回值:成功,返回0;失败,返回非0。 位移量(以起始点为基 点,移动的字节数) 0 向后移动 0 向前移动 起始点 文件开始 SEEK_SET0 文件当前位置 SEEK_CUR 1 文件末尾(EOF)SEEK_END 2 例:fseek(fp,100L,0); fseek(fp,-20L,SEEK_END); fseek(fp,50L,1); 2020/4/1134 例8.7磁盘文件中存有10个学生数据,要求将第 2,4,6,8,10 个学生数据显示在屏幕上。 #include struct student_type char name10; intnum; intage; char addr15; stud10; main() inti; FILE *fp; clrscr(); if( (fp=fopen(stu_list, b)=NULL ) pri

温馨提示

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

评论

0/150

提交评论