《c语言程序设计基础》.ppt
《《c语言程序设计基础》.ppt》由会员分享,可在线阅读,更多相关《《c语言程序设计基础》.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8章章 文件文件2 第第8 8章章 文件文件 8.2 文件的打开与关闭文件的打开与关闭 8.3 文件的读写文件的读写 8.4 文件的指针定位文件的指针定位 8.1 文件概述文件概述 8.5 文件的其他检测函数文件的其他检测函数 8.6 特殊的文件名特殊的文件名38.1 8.1 文件概述文件概述v文件是存在计算机存储介质中的一些信息的集合文件是存在计算机存储介质中的一些信息的集合。v文件是一些记录(文件是一些记录(recordrecord)的集合。记录就是具)的集合。记录就是具有一定关系的信息的集合。有一定关系的信息的集合。v在计算机中,将二进制代码的集合称为信息。在计算机中,将二进制代码的
2、集合称为信息。v文件的种类有很多。例如:文本文件,系统文件,文件的种类有很多。例如:文本文件,系统文件,图形、图像文件,视频文件,音频文件等等。图形、图像文件,视频文件,音频文件等等。v每个文件都有一个名字,称之为文件名。每个文件都有一个名字,称之为文件名。v文件的名字由两部分组成,文件名和扩展名(也文件的名字由两部分组成,文件名和扩展名(也称为文件后缀)。文件名和扩展名之间用一个称为文件后缀)。文件名和扩展名之间用一个“.”.”号分开。扩展名是说明文件的属性。号分开。扩展名是说明文件的属性。48.1 8.1 文件概述文件概述vC C语言在处理信息方面采用的是两种处理方法,一语言在处理信息方面
3、采用的是两种处理方法,一种是将文件看成是种是将文件看成是ASCIIASCII码的集合,在处理这个集码的集合,在处理这个集合时以合时以ASCIIASCII码为单位处理。由码为单位处理。由ASCIIASCII码组成的文码组成的文件,又称为文本文件。另一种是将文件看成是二件,又称为文本文件。另一种是将文件看成是二进制代码的集合。进制代码的集合。v所谓所谓文本文件文本文件,是把内存中的数据转变成相应的,是把内存中的数据转变成相应的ASCIIASCII码值码值形式,然后存放在磁盘上。因此,每个形式,然后存放在磁盘上。因此,每个字节存放一个字符的字节存放一个字符的ASCIIASCII码值。码值。v所谓所谓
4、二进制文件二进制文件,是把内存中的数据按其在内存,是把内存中的数据按其在内存中的存储形式原样存放到磁盘上去中的存储形式原样存放到磁盘上去58.1 8.1 文件概述文件概述00110011 00110010 00110111 00110110 0011011100110011 00110010 00110111 00110110 00110111文本文件文本文件文本文件文本文件1111 11111111 11110 0111 1111111 1111short int short int 数据数据数据数据327673276733 22 77 66 77 3276732767的各字符的的各字符的的
5、各字符的的各字符的ASCIIASCII码存放形式码存放形式码存放形式码存放形式0111 1111 1111 11110111 1111 1111 1111二进制文件二进制文件二进制文件二进制文件3276732767的二进制存放形式的二进制存放形式的二进制存放形式的二进制存放形式内存存放形式内存存放形式内存存放形式内存存放形式68.1 8.1 文件概述文件概述v数据按文本形式存储在磁盘上,占用的存储空间数据按文本形式存储在磁盘上,占用的存储空间多,存储时要花费转换时间。但以这种形式存储,多,存储时要花费转换时间。但以这种形式存储,一个字节代表一个字符,便于对字符进行逐个处一个字节代表一个字符,便
6、于对字符进行逐个处理,也便于输出显示理,也便于输出显示 v数据按二进制形式存储在磁盘上时,无须花费转数据按二进制形式存储在磁盘上时,无须花费转换时间,占用空间少。但字节不与字符对应,因换时间,占用空间少。但字节不与字符对应,因此不能直接输出显示此不能直接输出显示78.1 8.1 文件概述文件概述v缓冲文件系统缓冲文件系统v输出时,先将数据送到内存缓冲区,缓冲区装满后,才将输出时,先将数据送到内存缓冲区,缓冲区装满后,才将整个缓冲区的内容一次写入磁盘整个缓冲区的内容一次写入磁盘v输入时,先把磁盘中的一块数据读入到内存缓冲区,然后输入时,先把磁盘中的一块数据读入到内存缓冲区,然后再从缓冲区中把需要
7、的数据挑出来,送到程序数据区中再从缓冲区中把需要的数据挑出来,送到程序数据区中磁盘磁盘输入输入输出输出输入文件缓冲区输入文件缓冲区输出文件缓冲区输出文件缓冲区输出输出输入输入程序数据区程序数据区内存内存88.2 8.2 文件的打开与关闭文件的打开与关闭vC C语言执行程序在文件处理上有两种方式:语言执行程序在文件处理上有两种方式:v一种是借助操作系统的外壳功能完成一种是借助操作系统的外壳功能完成C C程序在运行程序在运行的过程中,数据的输入和输出,方式简单,条件的过程中,数据的输入和输出,方式简单,条件比较苛刻。比较苛刻。v另一种方式是完全借助另一种方式是完全借助C C语言的一些文件处理函数语
8、言的一些文件处理函数来完成来完成C C语言程序运行过程中的数据读入和输出,语言程序运行过程中的数据读入和输出,比较复杂,但功能强大。比较复杂,但功能强大。v1 1利用操作系统命令打开输入和输出文件。利用操作系统命令打开输入和输出文件。v具有很大的局限性,比如:读取数据只能从头开具有很大的局限性,比如:读取数据只能从头开始读取,不可剪裁读取数据,也不可对数据回读,始读取,不可剪裁读取数据,也不可对数据回读,输入和输出的数据文件只能是文本文件等。(略)输入和输出的数据文件只能是文本文件等。(略)98.2 8.2 文件的打开与关闭文件的打开与关闭v2 2利用函数处理文件利用函数处理文件v在缓冲文件系
9、统中,对每个正在使用的文件都自动分配一在缓冲文件系统中,对每个正在使用的文件都自动分配一个个FILEFILE类型的结构体变量,用于存放文件的有关信息,如类型的结构体变量,用于存放文件的有关信息,如文件号、文件状态、缓冲区地址和大小等文件号、文件状态、缓冲区地址和大小等typedef struct int level;/*缓冲区缓冲区“满满”或或“空空”的程度的程度*/unsigned flags;/*文件状态标志文件状态标志*/char fd;/*文件描述符文件描述符*/unsigned char hold;/*如无缓冲区不读取字符如无缓冲区不读取字符*/int bsize;/*缓冲区大小缓冲
10、区大小*/unsigned char*buffer;/*数据缓冲区位置数据缓冲区位置*/unsigned char*curp;/*文件定位指针文件定位指针*/unsigned istemp;/*临时文件指示器临时文件指示器*/short token;/*用于有效性检查用于有效性检查*/FILE;108.2 8.2 文件的打开与关闭文件的打开与关闭vC语言对于每一个要操作的文件,都必须定义一个语言对于每一个要操作的文件,都必须定义一个指针变量,指向该文件结构体变量,这个指针称指针变量,指向该文件结构体变量,这个指针称为文件指针为文件指针FILE *指指针变针变量量标识标识符;符;v打开文件操作:
11、打开文件操作:vFILE*fp;FILE*fp;vfp=fopen(fp=fopen(文件名称,使用文件方式文件名称,使用文件方式););v关闭文件操作:关闭文件操作:vfclose(fp);fclose(fp);11C C文件操作常用函数文件操作常用函数fopen 打开文件打开文件1fclose 关闭文件关闭文件2fgets 读字符串读字符串3fputs 写字符串写字符串4fgetc 读字符读字符5fputc 写字符写字符6feof 指针是否到尾指针是否到尾7fread 读数据块读数据块8fwrite 写数据块写数据块9fscanf 格式读数据格式读数据10fprintf 格式写数据格式写数
12、据11fseek 指针重定位指针重定位12rewind 指针移到头指针移到头13ftell 返回指针位置返回指针位置14128.2 8.2 文件的打开与关闭文件的打开与关闭文件文件类类型型使用方式使用方式意意义义备备注注文本文本文件文件”r”只只读读:打开一个文本文件,只允:打开一个文本文件,只允许读许读数据数据旧文件旧文件”w”只写:打开或建立一个文本文件,只允只写:打开或建立一个文本文件,只允许许写数据写数据新文件新文件”a”追加:打开一个文本文件,并在文件末尾写数据追加:打开一个文本文件,并在文件末尾写数据旧文件旧文件”r+”读读写:打开一个文本文件,允写:打开一个文本文件,允许读许读和
13、写和写旧文件旧文件”w+”读读写:打开或建立一个文本文件,允写:打开或建立一个文本文件,允许读许读写写新文件新文件”a+”读读写:打开一个文本文件,允写:打开一个文本文件,允许读许读,或在文件末追加数据,或在文件末追加数据旧文件旧文件二二进进制制文件文件”rb”只只读读:打开一个二:打开一个二进进制文件,只允制文件,只允许读许读数据数据旧文件旧文件”wb”只写:打开或建立一个二只写:打开或建立一个二进进制文件,只允制文件,只允许许写数据写数据新文件新文件”ab”追加:打开一个二追加:打开一个二进进制文件,并在文件末尾写数据制文件,并在文件末尾写数据旧文件旧文件”rb+”读读写:打开一个二写:打
14、开一个二进进制文件,允制文件,允许读许读和写和写旧文件旧文件”wb+”读读写:打开或建立一个二写:打开或建立一个二进进制文件,允制文件,允许读许读和写和写新文件新文件”ab+”读读写:打开一个二写:打开一个二进进制文件,允制文件,允许读许读,或在文件末追加数据,或在文件末追加数据旧文件旧文件138.2 8.2 文件的打开与关闭文件的打开与关闭#include void main()int a16,i,j,t;FILE*fp1,*fp2;fp1=fopen(in.dat,r);fp2=fopen(out.dat,w);for(i=0;i16;i+)fscanf(fp1,%d,&ai);fprin
15、tf(fp2,*Input data are*n);for(i=1;i=16;i+)fprintf(fp2,%3d,ai-1);if(i%4=0)fprintf(fp2,n);148.2 8.2 文件的打开与关闭文件的打开与关闭 for(i=0;i16;i+)for(j=i+1;j16;j+)if(aiaj)t=ai;ai=aj;aj=t;fprintf(fp2,*output data are*n);for(i=1;i=16;i+)fprintf(fp2,%3d,ai-1);if(i%4=0)fprintf(fp2,n);fclose(fp1);fclose(fp2);158.2 8.2 文
16、件的打开与关闭文件的打开与关闭v我们使用了两个函数一个是我们使用了两个函数一个是fscanffscanf,另一个是,另一个是fprintffprintf。我们在表对比一他们与标准输入输出函。我们在表对比一他们与标准输入输出函数数scanfscanf、printfprintf的区别。的区别。168.2 8.2 文件的打开与关闭文件的打开与关闭v为了使得上述的程序更加完善,确保程序在运行为了使得上述的程序更加完善,确保程序在运行过程中的正确性。这里我们引入一个新的函数过程中的正确性。这里我们引入一个新的函数exit(0)exit(0),这个函数是结束程序的运行。,这个函数是结束程序的运行。FILE
17、*fp1,*fp2;if(fp1=fopen(in.dat,r)=NULL)printf(cannot open infilen);exit(0);/不正确退出运行if(fp2=fopen(out.dat,w)=NULL)printf(cannot open outfilen);exit(0);/不正确退出运行178.3 8.3 文件的读写文件的读写v1 1fscanf()fscanf()和和fprintf()fprintf()函数函数v在上一小节中我们看到了这个函数的使用,他们在上一小节中我们看到了这个函数的使用,他们的格式是:的格式是:vfscanf(fscanf(文件指针,格式字符串,输
18、入列表文件指针,格式字符串,输入列表););vfprintf(fprintf(文件指针,格式字符串,输出列表文件指针,格式字符串,输出列表););v在他们的格式中,除了文件指针,其他的格式和在他们的格式中,除了文件指针,其他的格式和scanfscanf()()和和 printf()printf()函数是一致的。但是在使用中要注函数是一致的。但是在使用中要注意写入的格式和读出的格式有一定的区别。意写入的格式和读出的格式有一定的区别。188.3 8.3 文件的读写文件的读写#include void main()FILE*fp;int i,k,n;fp=fopen(data.dat,w);for(
19、i=1;i6;i+)fprintf(fp,%d,i);if(i%3=0)fprintf(fp,n);fclose(fp);fp=fopen(data.dat,r);fscanf(fp,%d%d,&k,&n);printf(k=%d,n=%dn,k,n);fclose(fp);198.3 8.3 文件的读写文件的读写v2 2fputc()fputc()和和 fgetc()fgetc()v(1 1)函数的功能就是将字符写入到)函数的功能就是将字符写入到fpfp所指向的文所指向的文件中去。它在语言的头文件件中去。它在语言的头文件中定义的中定义的格式为:格式为:vint fputc(int c,FIL
20、E*fp);int fputc(int c,FILE*fp);v调用方式为:调用方式为:vfputc(ch,fpfputc(ch,fp);vchch是一个字符变量,也可是字符常量。是一个字符变量,也可是字符常量。fpfp是文件是文件的指针。的指针。v如果输出成功,这个函数返回的值就是这个函数如果输出成功,这个函数返回的值就是这个函数输出的字符,否则,返回输出的字符,否则,返回EOFEOF(也就是(也就是-1-1)。)。20#include#include void main()FILE*fp;char ch,filename12;printf(Please input filename:);s
21、canf(%s,filename);if(fp=fopen(filename,w)=NULL)printf(cannot open input-file:%sn,filename);exit(0);printf(Please begin input string:n);ch=getchar();while(ch=getchar()!=n)fputc(ch,fp);fclose(fp);218.3 8.3 文件的读写文件的读写v(2 2)fgetc()fgetc()函数是从一个打开的磁盘文件中读函数是从一个打开的磁盘文件中读取一个字符,它在语言的头文件取一个字符,它在语言的头文件中定中定义的格式
22、为:义的格式为:vint fgetc(*fp);int fgetc(*fp);v调用方式为:调用方式为:vch=fgetc(fp);ch=fgetc(fp);v其中其中chch是一个字符变量。是一个字符变量。fpfp是一个文件的指针。是一个文件的指针。22#include#include void main()FILE*fp;char ch,filename12;printf(Please input filename:);scanf(%s,filename);if(fp=fopen(filename,r)=NULL)printf(cannot open input-file:%sn,file
23、name);exit(0);printf(begin output string:n);while(ch=fgetc(fp)!=EOF)putchar(ch);putchar(n);fclose(fp);238.3 8.3 文件的读写文件的读写#include void main(int argc,char*argv)FILE*fp1,*fp2;char ch;if(argc!=3)printf(“Input argument error!”);exit(0);if(fp1=fopen(argv1,“r”)=NULL)printf(“cannot open source-file:%sn”,i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言程序设计基础 语言程序设计 基础
限制150内