全国计算机等级考试实用应试教程二级C语言_第16章_文件_第1页
全国计算机等级考试实用应试教程二级C语言_第16章_文件_第2页
全国计算机等级考试实用应试教程二级C语言_第16章_文件_第3页
全国计算机等级考试实用应试教程二级C语言_第16章_文件_第4页
全国计算机等级考试实用应试教程二级C语言_第16章_文件_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、本章重点 16.1 C语言文件的概念 16.2 文件指针 16.3 打开文件 16.4 关闭文件 16.5 调用getc(fgetc)和putc(fputc)函数进行输入和输出 16.6 判文件结束函数EOF 16.7 fscanf函数和fprintf函数 16.8 fgets函数和fputs函数 16.9 fread函数和fwrite函数 16.10 文件定位函数 第第16章章 文件文件116.1 C语言文件的概念 文件是一种保存数据的基本数据结构,在逻辑上可认为文件是记录在外部介质上的数据的集合。 对文件输入输出方式也称“存取方式”。C语言中,有两种对文件的存取方式:顺序存取顺序存取和直接

2、存取和直接存取。2顺序存取文件的特点是:每当“打开”这类文件进行读或写操作时,总是从文件的开头开始,从头到尾顺序地读写;直接存取文件又称随机存取随机存取文件,其特点是:可以通过调用C语言的库函数去指定开始读写的字节号,然后直接对此位置上的数据进行读写操作。316.2 文件指针文件指针,实际上是指向一个结构体类型的指针变量,这个结构体中包含有:缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是“读”还是“写”、是否出错、是否已经遇到文件结束标志等信息。所有一切都在stdio.h头文件中进行了定义,并称此结构体类型名为FILE,可以用此类型名来定义文件指针。定义文件指针的一般形式为:FILE

3、*指针变量名 416.3 打开文件 1打开文件(fopen函数)打开一个文件调用标准I/O库函数fopen, 返回一个指向该文件类型的指针,用于后续的文件操作。用法:FILE *fopen(const char *filename, const char *mode);(1)如打开成功,则fopen的返回一个文件类型指针,否则返回NULL。(2)参数filename指定打开的文件名。(3)参数mode指定文件打开方式,具体说明如下: 5对文本文件的打开方式:r 以只读方式打开。w 以写方式打开,如果已存在该文件名的文件,文件被重写。a 附加方式。打开用于在文件末尾写,当文件不存在时,创建新文件

4、用于写。r+ 打开一个已存在文件进行读或写。w+ 创建一个新文件用于更新,如果已存在该文件名的文件,文件被重写。a+ 打开用于附加,当文件不存在时,创建新文件用于在文件末尾写。6对二进制文件的打开方式:rb 以只读方式打开。wb 以写方式打开,如果已存在该文件名的文件,文件被重写。ab 附加方式。打开用于在文件末尾写,当文件不存在时,创建新文件用于写。rb+ 打开一个已存在文件用于更新。wb+ 创建一个新文件用于更新,如果已存在该文件名的文件,文件被重写。ab+ 打开用于附加,当文件不存在时,创建新文件用于在文件末尾写。例如:打开一个文件7#include main()FILE *fp; if

5、(fp=fopen(jiaotong, r)=NULL) /*打开文件,并检查文件指针打开文件,并检查文件指针*/ printf(cannt open the file:jiaotong); exit(0); else printf(open the file:jiaotong); fclose(fp); 816.4 关闭文件对文件进行读写操作完成之后,应及时关闭该文件。关闭一个文件调用标准I/O库函数fclose, 它清除与文件相关的流缓冲区。此后将不能再通过该指针操作文件。函数fclose的用法:int fclose(FILE *);如调用成功,则fclose的返回0,否则返回EOF(-1

6、)。例如:关闭一个文件 9#include main()FILE *fp; if(fp=fopen(abc, r)=NULL) exit(0); if(0=fclose(fp) /*关闭文件,并检查返回值*/ printf(close the file:jiaotong); else printf(cannt close the file:jiaotong); 1016.5 调用getc(fgetc)和putc(fputc)函数进行输入和输出1输入字符函数fgetcfgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:字符变量=fgetc(文件指针); 例如:ch=fgetc(fp

7、);其意义是从打开的文件fp中读取一个字符并送入ch中。1112#include #include main()FILE * fpout;char ch;if ( fpout = fopen ( file_a.dat, w ) = NULL)printf(Cant open this file!n);exit(0);ch = getchar();while ( ch != )fputc( ch, fpout);ch = getchar();fclose(fpout);2输出字符函数fputcfputc函数的功能是把一个字符写入指定的文件中,函数调用的 形式为:fputc(字符量,文件指针);

8、其中,待写入的字符量可以是字符常量或变量,例如:fputc(a,fp);其意义是把字符a写入fp所指向的文件中。例如:用fputc向标准输出终端设备输出一个字符串。1314#include #include main()FILE * fpin;char ch;if ( fpin = fopen ( file_a.dat, r ) = NULL)printf(Cant open this file!n);exit(0);ch = fgetc( fpin );while ( ch != EOF )putchar( ch );ch = fgetc ( fpin );fclose ( fpin );1

9、6.6 判文件结束函数EOF读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件的结尾。此时如果读数据,将会出现错误。为了保证读写数据的正确性,需要进行文件尾测试,文件尾测试使用函数feof(),其格式如下:格式:int feof(FILE *fp)功能:测试fp指向的文件是否到达文件尾。若到若到达文件尾,返回值为非达文件尾,返回值为非0,否则返回值为0。1516#include #include void filecopy( FILE * , FILE *);main()FILE * fpin, * fpout;fpin = fopen ( file_a.dat, r );fpout

10、 = fopen ( file_b.dat, w );filecopy( fpin, fpout);fclose ( fpin );fclose ( fpout );void filecopy( FILE * fpin, FILE * fpout)char ch;ch = getc( fpin );while ( !feof( fpin )putc ( ch, fpout);ch = getc ( fpin );16.7 fscanf函数和fprintf函数1格式读函数fscanf()格式:int fscanf (FILE *fp,const char *format , address, )

11、功能:根据format中的格式从fp指向的文件中读取数据存入到相应的address指向的变量中。2格式写函数fprintf()格式:int fprintf (FILE *fp,const char *frmat , argument, )功能:根据格式字符串frmat把argument列表中的表达式值写到fp所指向的文件中。1716.8 fgets函数和fputs函数1读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:fgets(字符数组名,n,文件指针);其中的n是一个正整数。表示从文件中读出的字符串不超过 n1个字符。在读入的最后一个字符后加上串结

12、束标志0。 例如:fgets(str,n,fp);其意义是从fp所指的文件中读出n1个字符送入字符数组str中。182写字符串函数fputsfputs函数的功能是向指定的文件写入一个字符串,其调用形式为:fputs(字符串,文件指针);其中字符串可以是字符串常量,也可以是字符数组名或指针变量,例如:fputs(abcd,fp);其意义是把字符串“abcd”写入fp所指的文件之中。 1916.9 fread函数和fwrite函数直接I/O又叫二进制I/O,用于整块数据的读写。可用来读写一组数据,如一个数组元素,一个结构变量的值等。1fread函数fread函数是从输入流中读取一个数据块。调用形式

13、:int fread (void* ptr, int size, int n, FILE *stream);202fwrite函数fwrite函数用来输出一个数据块到指定流中。用法:int fwrite(const void* ptr, int size, int n, FILE *stream);fwrite将n项长度为size字节数据复制到流中,终结空字符不拷贝。如果调用成功,则fputs返回0;出错时,则返回EOF。参数stream为文件流指针。2116.10 文件定位函数实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。移动文件内部位置指针的函数主要有两个,即 rewind

14、函数和fseek函数。另外函数ftell用来得到文件指针的当前位置,用相对于文件头的字节位移量表示。2216.10.1 freek函数格式:int fseek (FILE *fp, long offset, int from)功能:移动文件位置指针到指定位置。说明:(1)fseek()把文件位置指针移动到与from所指定的文件位置距离offset个字节处,如果指针移动成功,则返回0,出错时返回非0。(2)参数offset为字节偏移量,为长整型数据,正数代表前进,负数代表后退。(3)参数form代表移动的开始位置。 2316.10.2 ftell函数格式:long ftell (FILE *fp)。功能:得到fp指向的文件的文件位置指针位置。说明:ftell()在调用成功后返回当前指针位置,出错时返回1L。当打开一个文件时,通常并不知道该文件的长度,通过以下函数调用可以求出文件的字节数:fseek(fp, 0L, SEEK_END); /*把位置指针移到文件末尾*/t=ftell(fp)

温馨提示

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

评论

0/150

提交评论