文件程序设计PPT课件_第1页
文件程序设计PPT课件_第2页
文件程序设计PPT课件_第3页
文件程序设计PPT课件_第4页
文件程序设计PPT课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、C 语言程序设计 第9章 文件程序设计,第9章 文件程序设计,9.1 文件概述 9.2 文件的基本操作 9.3 文件的数据块读写操作 9.4 文件的其他操作 9.5 文件应用举例,9.1 文件概述,从上机实现第一个C语言程序开始,“文件”即与学习C语言程序设计密不可分,实现任何一个C语言程序,都会涉及到多种类型的文件,例如,编辑阶段建立的源程序文件、编译阶段生成的目标代码文件、连接阶段构建的可执行文件等。因此,“文件”并不是一个新概念。但是,C语言中的“文件”有其自身的特点,本节就C语言中关于“文件”的概念、分类、文件操作的基本过程等作概要介绍。 重点内容 文件的操作过程 文件指针,9.1 文

2、件概述,9.1.1 文件的概念 9.1.2 文件的分类 9.1.3 文件的一般操作过程 9.1.4 文件的指针,9.1.1 文件的概念,文件是计算机中的一个重要概念,通常是指存储在外部介质上的信息的集合。 在C语言中,所有的外部设备均被作为文件对待,这种文件称为设备文件。 计算机对文件的操作总体上分成输入和输出两大类,文件的输人输出(I/0)过程通过操作系统进行管理。 C语言程序对文件的处理通过标准函数库中的文件操作函数实现。,9.1.1 文件的概念,C语言使用缓冲文件系统在程序和数据外部文件之间交换数据。 程序中的数据(如存储在数组、简单变量、结构体变量中的数据等)在写入磁盘文件之前,首先在

3、“输出文件缓冲区”暂存,当该缓冲区数据存满后,再输出到文件中。这一过程称为“写文件”,是数据输出过程。 “写文件”的逆向操作是将文件中的数据装入内存,作为程序处理数据。这一过程称为“读文件”,是数据输入过程。当从文件向内存输入数据时,首先把读入的数据输送到“输入文件缓冲区”,然后再传送给程序。,9.1.1 文件的概念,使用缓冲区的文件读、写示意图,9.1.2 文件的分类,以ASCII码字符形式存储的文件称为文本文件,又叫ASCII文件。 例如用高级程序语言编写的程序文件是文本文件,用Windows “记事本”程序创建的文件也是文本文件。文本文件是一种字符流文件,文本文件的一个字符就是一个字节,

4、因而方便了字符的处理,不过文本文件一般要占用较大的存储空间。,二进制文件存储二进制数据,按照数据在内存中的字节流存储。 例如C程序的目标文件(扩展名为obj)和可执行文件(扩展名为exe)都是二进制文件。在二进制文件中,字节信息与实际的数据位并不一一对应,因此,若直接显示二进制文件内容时,用户看到的是一些不能识别的字符。,文本文件,二进制文件,9.1.3 文件的一般操作过程,使用文件的一般步骤 打开文件操作文件关闭文件 打开文件:建立用户程序与文件的联系,系统为文件开辟文件缓冲区。 操作文件:是指对文件的读、写、追加和定位操作。 读操作:从文件中读出数据,即将文件中的数据输入到计算机内存。 写

5、操作:向文件中写入数据,即将计算机内存中的数据输出到文件。 追加操作:将新的数据写到文件原有数据的后面。 定位操作:移动文件读写位置指针。 关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。,9.1.4 文件的指针,文件型指针变量的定义 FILE *变量名; 例如: FILE *p; 注意: 由于文件类型FILE在头文件stdio.h中定义,所以在使用FILE类型前必须先打开stdio.h文件。 如果需要对某一个文件进行读写操作,必须首先要指定指向它的文件指针。只有通过文件指针,才能调用相应的文件。当程序需要同时处理多个文件时,则需要说明多个FILE型的指针变量,使

6、它们分别指向多个不同的文件。,9.2文件的基本操作,9.2.1 打开和关闭文件 9.2.2 最基本的文件读写函数,9.2.1 打开和关闭文件,打开文件操作是使用文件的第一个步骤,而关闭文件操作则是使用文件的最后一个步骤。C语言系统分别使用fopen()函数和fclose()函数实现文件的打开和关闭操作。 1文件打开函数fopen() fopen()函数用来实现打开文件,它解决如下3个问题: 指定要打开的文件名; 指定文件的使用方式,如是读文件还是写文件等; 为打开的文件指定一个指针变量,以便使用这个指针变量对文件进行访问。 fopen()函数的调用方式 FILE *fp; fp=fopen(文

7、件名, 使用文件的方式); 例如: fp=(example.txt, r); 表示要打开的文件名为example.txt,使用文件的方式是“r”方式,文件指针是fp。,9.2.1 打开和关闭文件,文件使用方式,9.2.1 打开和关闭文件,2关闭文件函数fclose() fclose()函数的一般格式 fclose(文件指针); 功能 关闭“文件指针”所指向的文件,释放打开文件时使用的结构体变量,断开文件指针与文件的联系。 例如: fclose(fp);,9.2.2 最基本的文件读写函数,1fputc()函数 一般形式 fputc(ch,fp); 功能 将字符(ch的值)输出到fp所指向的文件中

8、。,9.2.2最基本的文件读写函数,例9-1使用fputc()函数在屏幕显示一个字符串。 /* program e9-1.c */ #include int main() char *p=This is a example.; while(*p!=0) fputc(*p+,stdout); return 0; ,设备文件,9.2.2最基本的文件读写函数,例9-2 把从键盘输入的一个字符串写入到磁盘文件example.txt中。 /* program e9-2.c */ #include int main() char ch; FILE *fp; fp=fopen(example.txt,w);

9、 printf(Enter a string: ); while(ch=getchar()!=n) fputc(ch,fp); fclose(fp); return 0; ,9.2.2最基本的文件读写函数,2fgetc()函数 从指定文件读入一个字符,该文件必须是以读或读写方式打开的。 通常使用如下的形式调用fgetc()函数 ch=fgetc(fp); 其中,fp为文件型指针变量,ch为字符变量。正常情况下fgetc()函数的返回值是从文件中读出的一个字符。 当打开文件并立即使用fgetc()读文件时,fgetc()函数从文件开始位置读取一个字符。每读取一个字符后,文件的位置指针后移一个字符

10、位置。若当前读取的是文本文件,当遇到文件结束标志时,fgetc()函数的返回值为EOF。,9.2.2最基本的文件读写函数,例9-3 使用fgetc()函数输出文件example.txt的内容。 /* program e9-3.c */ #include int main() char ch; FILE *fp; fp=fopen(example.txt,r); while(ch=fgetc(fp)!=EOF) putchar(ch); fclose(fp); return 0; ,9.2.2最基本的文件读写函数,例9-4 使用feof()进行文件读取控制,输出文件example.txt的内容。

11、,#include #include int main(void) char ch; FILE *fp; if(fp=fopen(example.txt,r)=NULL) printf(file can not open!n); exit(1); ch=fgetc(fp); while(!feof(fp) putchar(ch); ch=fgetc(fp); fclose(fp); return 0; ,判断被读取的文件是否已经读完。当文件位置指针越过文件结束标志时,feof()的值是0。,9.3文件的数据块读写操作,文件的数据块读写是指对文件进行读写操作时,一次读写多个数据,C语言提供的操作

12、函数是fread()和fwrite()。 1. fwrite()函数 2. fread()函数,9.3文件的数据块读写操作-fwrite()函数,fwrite()函数的功能是把内存中的一些数据块写到指定的文件中。 一般调用形式 fwrite(buffer,size,count,fp); 其中: fp是接受数据的文件指针; buffer是数据块的内存首地址,通常是指针变量名、数组名等; size是一个数据块的字节数(即数据块的大小); count是执行一次fwrite()函数从内存输出到fp文件的数据块数目。,9.3文件的数据块读写操作-fwrite()函数,例9-5 从键盘输入一批学生数据,然

13、后以“stu_list”文件名存储到磁盘上。,#include #include #define N 4 struct student_type char name10; int num; int score; stud;,int main() int i; FILE *fp; if(fp=fopen(stu_list,wb)=NULL) printf(Can not open filen); exit(1); printf(Input data,please!n); for(i=0;iN;i+) scanf(%s%d%d,, ,9.3文件的数据块读写操作- fread()函

14、数,例9-6 将上述stu_list文件的内容显示在屏幕上。,/* program e9-6-1.c */ #include #include #define N 4 struct student_type char name10; int num; int score; stud; int main() int i; FILE *fp; if(fp=fopen(stu_list,rb)=NULL) printf(Can not open file.n); exit(1); for(i=0;iN;i+) fread( ,9.3文件的数据块读写操作- fread()函数,再如,设有如下定义: s

15、truct student_type char name10; int num; int age; stud40; 其中,结构体数组stud的每一个元素用来存放一个学生的有关数据,假设学生的数据已存放在磁盘文件中,且该文件已打开,并由fp指向,则可以用下面的语句把文件中前40个学生的数据输入到结构体数组stud中: for(i = 0; i40;i+) fread(,9.4 文件的其他操作,9.4.1 文件的格式化读写 9.4.2 文件位置指针的定位 9.4.3 文件的字符串操作,9.4.1 文件的格式化读写,1文件的格式化读操作 由fscanf()函数实现,从指定的文件中,按照说明的格式向变

16、量提供数据。 一般使用格式 fscanf(fp,格式字符串,输入表列); 其中 fp是文件指针 “格式字符串”和“输入表列”与scanf()函数的相关内容相同。 例如: fscanf(fp,“%d”, 该语句将磁盘文件中的数据送给变量m,其中的磁盘文件由fp指向。,9.4.1 文件的格式化读写,2文件的格式化写操作 由fprintf ()函数实现,将指定变量的值按照一定的格式写到指定的文件中。 一般使用格式 fprintf(fp,格式字符串,输出表列); 说明: fp是要写入数据的文件指针。 “格式字符串”和“输出表列”与printf()函数的相关内容形同。 例如: fprintf(fp,%d

17、,m); 该语句将整型变量m按%d格式输出到fp指向的文件中。,例9-7从键盘输入一个字符串和一个十进制整数,将它们写入test文件中,然后再从test文件中读出并显示在屏幕上。,#include int main( ) char s100; int a; FILE *fp; if(fp=fopen(test, w)=NULL) printf(file open error.n);exit(0); fscanf(stdin,%s%d,s, ,9.4.2 文件位置指针的定位,1fseek()函数 功能:改变文件位置指针。 调用形式 fseek(fp,offset,position); 其中: f

18、p为文件型指针; 文件位置指针的定位由参数offset和position共同确定。position规定指针定位时的基准位置,offset规定文件位置指针离开基准位置的偏移量,它的单位是字节。position的值用整常数表示,取值范围是0、1、2三个数之一,其意义如下: 0:表示基准位置为文件的开头位置; 1:表示基准位置为文件的当前位置; 2:表示基准位置为文件的结尾位置,该位置在文件内容的最后一个字节之后。,9.4.2 文件位置指针的定位,fseek()函数调用的实例: fseek(fp,50L,0); 将位置指针移到文件头起始第50个字节处 fseek(fp,100L,1); 将位置指针从

19、当前位置向文件尾方向移动100个字节 fseek(fp,-20L,2); 将位置指针从文件末尾向文件头方向移动20个字节,9.4.2 文件位置指针的定位,例9-8 在例9-6中建立了学生数据文件stu_list,将其中第3个学生的成绩修改为97。,/* program e9-8.c */ #include #include struct student_type char name10; int num; int score; stud;,int main() int i,size; FILE *fp; size=sizeof(struct student_type); if(fp=fopen

20、(stu_list,rb+)=NULL) printf(file open error.n); exit(1); fseek(fp,2*size,0); fread( ,9.4.2 文件位置指针的定位,2. rewind()函数 作用:将文件位置指针复位。 调用形式 rewind(fp); 其中:fp为文件型指针。 执行rewind()函数后,对于fp指向的文件,不管当前的文件位置指针在何处,都使它复位到文件的开始位置。,9.4.1 文件位置指针的定位,例9-9 在屏幕上显示文件e9-6-2.c的内容,并将该文件复制为文件e9-6-3.c。 /* program e9-9.c */ #incl

21、ude int main(void) char ch; FILE *fp1,*fp2; fp1=fopen(e9-6-2.c,r); fp2=fopen(e9-6-3.c,w); while(ch=fgetc(fp1)!=EOF) putchar(ch); rewind(fp1); while(ch=fgetc(fp1)!=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); return 0; ,9.4.2 文件位置指针的定位,3. ftell()函数 ftell()函数用于获取文件位置指针,其调用形式如下: ftell(fp); 其中:fp为文件指针。

22、 ftell()函数的返回值是fp所指向文件的当前读写位置,该值是一个长整型数,是位置指针从文件开始处到当前位置的位移量的字节数。,9.4.3 ftell()函数,例9-10 新建data.txt文件,检查文件位置指针值;然后将字符串Beijing 2008写入文件中,再检查文件位置指针的值。 #include stdio.h int main( ) FILE *fp; long position; fp=fopen(data.txt,w); position=ftell(fp); printf(position=%ldn,position); fprintf(fp,Beijing 2008)

23、; position=ftell(fp); printf (position=%ldn, position); fclose(fp); return 0; ,9.4.4 文件的字符串操作,1fgets()函数 一般调用形式 fgets(buffer,n,fp); 作用 从fp指向的文件中读取n-1个字符,然后存储到以buffer为首地址的的内存空间中,通常buffer是一个指针变量名、数组名等。如果在读入 n-1个字符的过程中遇到换行符或EOF,读入即结束。字符串读入后在最后加一个0字符作为字符串结束标志。,9.4.4 文件的字符串操作,2fputs()函数 调用形式 fputs(buffer

24、,fp); 作用 将内存buffer中的字符串写到fp指向的文件中,buffer可以是一个字符串常量,也可以是字符串的首地址。,9.4.4 文件的字符串操作,例9-11 将字符串Visual C+和Visual basic依次存入文件text中,然后将第一个字符串读出并显示出来。 #include int main() FILE *fp; char string20; fp=fopen(text,w+); fputs(Visual C+n,fp); fputs(Visual basicn,fp); rewind(fp); fgets(string,20,fp); puts(string); f

25、close(fp); return 0; ,9.5 文件应用举例,9.5.1文件复制 9.5.2 存储在文件中的学生数据排序,9.5.1 文件复制,例9-12 设计一个程序,实现任意文本文件的复制。 问题分析与算法设计 由于源文件是任意的,所以源文件名应通过键盘输入;同样,生成的目标文件名也应由键盘输入。 源文件以只读方式打开,目标文件以写方式打开。 从第一个字符开始,顺序逐字符读出源文件,每读出一个字符,立即写入目标文件中。,实现程序,#include #include int main(void) char source20,target20,ch; FILE *fp_s,*fp_t; printf(Enter the source filename: ); scanf(%s,source printf(Enter the target fi

温馨提示

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

最新文档

评论

0/150

提交评论