华南农业大学c语言课件第11章.ppt_第1页
华南农业大学c语言课件第11章.ppt_第2页
华南农业大学c语言课件第11章.ppt_第3页
华南农业大学c语言课件第11章.ppt_第4页
华南农业大学c语言课件第11章.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、第11章 文 件,掌握文件类型指针(file类型指针) 掌握文件的打开与关闭(fopen, fclose) 掌握文件的读写(fprintf, fscanf;fgetc,fputc fgets,fputs;feof;ferrort),11.1 文件的概述,文件是指存储在外部介质上数据的集合。 C语言把文件看作一个字符的序列。根据数据组织形式可分为ASCII文件(文本文件.TXT)和二进制文件。每一个ASCII字符占内存一个字符,而二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘。 ASCII码(文本)文件和二进制文件 ASCII码(文本)文件: 文件的每一个字节放一个ASCII代码

2、,代表一个字符。 二进制文件: 把内存中的数据按其在内存中的存储形式原样输出到磁盘文件上,如:一个整型数835,在内存中占2个字节,如果按ASCII码形式输出则占3个字节(每个字符占1个字节),而按二进制形式输出,在磁盘上只占2个字节。,835=29+28+26+21+20,在C语言中对文件的存取是以字符(字节)为单位的。标准I/O采用缓冲文件系统处理文本文件和二进制文件。,缓冲文件系统:系统自动在内存区为每一个正在使用的文件名开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存的缓冲区中,装满缓冲区后再一起送到磁盘中去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后

3、再从缓冲区逐个地将数据送到程序数据区。 非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。 对文件的读写操作通过库函数实现。,11.2 文件类型指针,定义:缓冲文件系统中,获取内存中存放文件有关信息的结构体的指针为文件类型指针。 FILE结构体类型 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。 结构体类型由系统定义为“FILE”。 有的C版本在 stdio.h文件中有如下定义 typedef struct int fd; /* 文件号*/ int cleft; /* 缓冲区中剩下的

4、字符*/ int mode; /* 文件操作模式 */ char *_nexttc; /* 下一个字符位置 */ char *_buff; /* 文件缓冲区位置 */ FILE;,例如: 定义一个FILE类型的数组 FILE efile -MAXFILE; -MAXFILE 数组元素个数,也就是可使用文件的最大数目。 例如: 定义一个文件指针变量 FILE *fp; fp 是一个指向FILE结构体的指针变量。可以使 fp指向某一个具体文件的结构体变量,通过读取该结构体变量中的有关信息来实现对文件的访问和操作。也就是通过fp 指定要被访问的文件。,11.3 文件的打开与关闭,11.3.1 文件的

5、打开( fopen)函数 功能:在对文件读写之前打开文件。 调用方式:FILE *fp; fp=fopen(文件名,作用方式); 三要素:文件指针,文件名,使用方式 例:fp=fopen(“A1.dat”, “r”); 或 fp=fopen(“A2.dat”, ”w”); 若fopen函数不能打开文件,则返回一个错误信息(NULL或0) 常用打开文件的方法: if(fp=fopen(“file1.dat”, “r”)=NULL) printf(“Cant open this filen”); exit(0); exit函数的作用是关闭所有文件,终止正在执行的程序,文件使用方式如下表:,11.3

6、.2 文件的关闭(fclose)函数,函数调用的一般形式: fclose(文件指针); 功能:使用文件之后关闭文件。使文件指针变量不再指向该文件。 例如: fclose(fp); fclose函数成功关闭文件后返回0;否则返回EOF(EOF在stdio.h文件中被定义为-1)。 若关闭了文件之后,再要对文件执行读写操作,必须再执行“打开”操作。 11.4 文件的读写C语言提供了多组向文件读写的函数,如:fgetc、fputc、fread和fwrite函数,以及fscanf和fprintf函数,fgets和fputs函数等,11.4.1格式化读写函数 (fprintf和fscanf) 函数调用的

7、一般形式: fprintf(文件指针,格式字符串,输出表列); fscanf(文件指针,格式字符串,输入表列); fprintf功能: 将指定对象格式化输出到指定磁盘文件上 fscanf功能: 将指定磁盘文件格式化赋给指定对象 如:fscanf(fp,”%d%f”, ,例1 将两变量的数值写入test.txt 。 #include “stdio.h” main() FILE *fp; int i=3; float t=4.5; if(fp=fopen(“test.txt”, “w”) = = NULL) printf(“file open failed”); exit(0); fprintf(

8、fp,”%d, %6.2f”,i, t );/*将数据i,t存入文件*/ fclose(fp); ,运行结果: test.txt文件的内容是 3,4.50,定义文件指针变量,打开文件,写入i, t,关闭文件,11.4.2 向文件读取或写入一个字符函数(fgetc和fputc),(1)fgetc函数 该函数是从指定的文件中读出一个字符赋给变量。 函数调用的格式为: ch=fgetc(fp); 若读到文件尾结束符时,函数返回一个文件结束标志EOF(-1) 也可用系统提供的feof函数来判断文件是否结束。feof(fp)的值为1(真)结束,否则为0(假)未结束。,(2)fputc函数 该函数是向fp

9、指向已打开的文件写入一个字符。 函数调用的格式为:fputc(ch, fp); 将ch字符(可以为字符常量、字符变量)的值写入到fp所指向的文件中。如果成功该函数返回该字符,否则返回EOF或1。,例1 从键盘输入一串字符,然后逐个写入文件(名字在程序中给出),直到输入为止。 include main() FILE *fp; char ch,fn10; printf(“Please input filename: “); if(fp=fopen(fn, “w”)=NULL) printf(“Cant open filen”); exit(0); ch=getcher(); while(ch!=)

10、 fputc(ch, fp); ch=getchar(); fclose(fp); ,程序运行 Please input filename:data1.dat C Language 打开文件data1.dat: C Language,11.4.3读写数据块函数 (fgets和fputs) 从fp指向的文件读出一个具有n-1个字符串的fgets函数。 调用的一般形式: fread(buffer, size, count, fp); 向指定的文件输出(写入)一个字符串fputs函数。 调用的一般形式: fwrite(buffer, size, count, fp); 其中:buffer: 是一个指

11、针,是读出或写入数据的起始地址。 size: 要读写数据的字节数。 count: 读写多个size字节数(数据项)。 fp: 文件类型指针。,例如fputs(“C Language.”, fp); 把字符串“C Language.”输出(写入)fp指向的文件中。 注意:字符串末尾的0不输出。 如果输出成功,则函数值为0,否则为EOF。 又如 fread(a, 2, 3, fp); 其中a是整型数组名称,一个整型数占2个字节。函数的含义是从fp所指向的文件读入3次(每次2个字节)数据,存入a数组中。,11.4.4读写字符串函数(fgets和fputs) fgets()函数 函数调用的一般形式:

12、fgets(str, n, fp); 其中str是指向字符型的指针,n是整型量,fp是文件指针。 功能:从fp指向的文件读出一个具有n-1个字符的字符串,存入起始地址为str的内存中。 这里n是包括字符串最后的一个字符0,如果函数调用成功返回地址str,失败则返回NULL,如果在没有读完字符串前遇到结束标志EOF或换行符,读操作结束,函数返回str的首地址。str可以是字符数组名、字符串常量和字符型指针。,11.5文件的定位 文件的定位是指文件中的位置指针重新确认位置。一般位置指针采用顺序读写文件时,每读写一次操作后,该指针自动向后移动一个字符位置,如果想改变这种读写方式就可用下面的函数。 1

13、1.5.1rewind函数 函数调用的一般形式: rewind(fp); 功能:使文件中位置指针重新返回(定位)到文件的开头。该函数无返回值。 最好加上该函数的说明,比如“返回文件开头”,可以吗?,fputs函数 函数调用的一般形式:fputs(str, fp); 功能:将str指向的字符串输出到fp所指向的文件中,向指定的文件输出(或写入)一个字符串。 注意:字符串末尾的0不输出。如果输出成功,则函数值为0,否则为EOF。,#include main() FILE *fp1, *fp2; fp1=fopen(“file1.c”, “r”); fp2=fopen(“file2.c”, “w”)

14、; while(!feof(fp1) putchar(getc(fp1); rewind(fp1); while(!feof(fp1) putc(getc(fp1), fp2); fclose(fp1); fclose(fp2); ,若fp1指向的文件指针不到文件尾,读出文件中指针指向的字符并输出到屏幕,继续读出文件指针指向的字符并写入fp2指向的文件中,文件指针返回到文件开头位置,11.5.2 随机读写函数fseek 对文件的内容不但可以顺序读写,还可以随机读写。 随机读写就是按用户的需要将文件中位置指针进行相对位移到某个位置的读写方式。 函数一般形式: fseek(文件类型指针,位移量,起始点); 其中:位移量为字节数L,且字节数为Long型,“+”表示向前移动,“-”表示向后移动。起始点取“0”代表文件开始位置;取“1”代表当前位置;取“2”代表文件末尾位置。 功能:从起始点开始位置指针移动一个位移量。,例如:fseek(fp, 40L, 0);表示位置指针移动离文件开头40个字节处。 Fseek(fp, 20L, 1);表示位置指针从当前位置向前移20个字节处。 Fseek(fp, -3L, 2);表示位置指针移到离文件末尾向后退3个字节处。 11.5.3 取文件指针的位置函数(ftell) 函数调用的一

温馨提示

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

评论

0/150

提交评论