《c程序设计授课》课件-第09章 文件_第1页
《c程序设计授课》课件-第09章 文件_第2页
《c程序设计授课》课件-第09章 文件_第3页
《c程序设计授课》课件-第09章 文件_第4页
《c程序设计授课》课件-第09章 文件_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第9章文件*重点与难点9.1文件的概念9.2文件类型指针9.3文件的操作9.4出错的检测*本章小结*作业重点与难点重点:文件的打开与操作。难点:随机读写操作。9.1文件的概念9.1.1文件的概念9.1.2标准设备文件9.1.1文件的概念1、文件2、C文件3、文件系统1、文件文件:是存放于外部存储介质中的程序或数据的集合,需要时才调入内存。举例:源程序文件、目标文件、可执行程序和库文件等等。2、C文件分类:文本文件和二进制文件流式文件:C语言系统在处理二进制文件时并不区分类型,都看成是字符流,按字节进行处理。

输入、输出字符流的开始和结束由程序控制而不受物理符号(如回车符)的控制。

因此,二进制文件也称作“流式文件”。文本文件和二进制文件内存中存储形式0010011100010000外存中存储形式二进制形式0010011100010000ASCII形式0011000100110000001100000011000000110000(1)(0)(0)(0)(0)3、文件系统分类:缓冲文件系统和非缓冲文件系统非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。

Unix系统中用该系统处理二进制文件。缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。

ANSIC标准采用缓冲文件系统。不采用非缓冲文件系统

缓冲文件系统输出文件缓冲区输入文件缓冲区程序数据区磁盘输出输入输出输入内存9.1.2标准设备文件设备文件:是指与主机相连的各种外部设备,如显示器、打印机、键盘等。在操作系统中,外部设备也看作一个文件进行管理,对它们的输入、输出等同于对磁盘文件的读和写。标准设备文件:stdin、stdout、PRN等

9.2文件类型指针文件指针:是缓冲文件系统的关键概念。每个被使用的文件都在内存中开辟一个区用来存放文件的有关信息。文件类型指针的定义typedefstruct{shortlevel;/*缓冲区“满”或“空”的程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*如无缓冲区不读取字符*/shortbsize;/*缓冲区的大小*/unsignedchar*buffer;/*数据缓冲区的位置*/unsignedchar*curp;/*当前指向的指针*/unsignedistemp;/*临时文件指示器*/shorttoken;/*用于有效性检查*/}FILE;文件类型指针:FILE*fp;9.3文件的操作9.3.1文件操作函数9.3.2文件的打开与关闭9.3.3文件的顺序读写9.3.4文件的随机读写9.3.1文件操作函数文件的操作是通过文件操作的函数来实现的,函数原型在头文件stdio.h中定义。文件操作函数文件读写函数功能fgetc(),getc()从指定文件取得一个字符fputc(),putc()把字符输出到指定文件fgets()从指定文件读取字符串fputs()把字符串输出到指定文件getw()从指定文件读入一个字(int型)putw()把一个字(int型)输出到指定文件fread()从指定文件中读取数据块fwrite()把数据块写入到指定文件fscanf()从指定文件按格式输入数据fprintf()按指定格式将数据写到指定文件中文件操作函数(续)分类函数名功能打开文件fopen()打开文件关闭文件fclose()关闭文件文件定位fseek()改变文件位置指针rewind()使文件位置指针重新置于文件开头ftell()返回文件位置指针的当前值文件状态feof()若遇到文件末尾,返回非0值ferror()若对文件操作出错,返回非0值clearerr()使ferror和feof函数值置09.3.2文件的打开与关闭文件使用前必须“打开”,使用结束后应“关闭”。文件打开

FILE*fp;fp=fopen(文件名,使用文件方式)

举例:fp=fopen("c:\\ccdos\\hzk16","rb");文件关闭

fclose(文件指针);

举例:fclose(fp);文件打开方式文件使用方式含义"r"(只读)为输入打开一个文本文件"w"(只写)为输出打开一个文本文件"a"(追加)向文本文件尾追加数据"rb"(只读)为输入打开一个二进制文件"wb"(只写)为输出打开一个二进制文件"ab"(追加)向二进制文件尾追加数据"r+"(读写)为读/写打开一个文本文件"w+"(读写)为读/写建立一个新的文本文件"a+"(读写)为读/写打开一个文本文件"rb+"(读写)为读/写打开一个二进制文件"wb+"(读写)为读/写建立一个二进制文件"ab+"(读写)为读/写打开一个文本文件打开方式需要注意问题"r"/"rb"/"r+"/"rb+"、"a"/"ab"/"a+"/"ab+"方式:打开的文件应该已经存在。if((fp=fopen("d:\\my\test.dat","r"))==NULL){printf("\ncannotopenthisfile!");exit(0);}如何判断文件是否正确打开?标准文件在程序运行开始时,系统自动打开3个标准文件:标准输入(stdin)、标准输出(stdout)、标准出错输出(stderr)。文件关闭文件关闭的作用:先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。避免因缓冲区未满,数据没有正式输出到文件而造成数据丢失。例9.1判断文件的打开和关闭成功与否?main(){FILE*fp;inti;fp=fopen("test.dat","rb");if(fp==NULL)printf("\nFileopenerror");i=fclose(fp);if(i==0)printf("\nFilecloseOK");elseprintf("\nFilecloseerror");}9.3.3文件的顺序读写1、字符形式读写函数2、字符串形式读写函数3、组数据形式读写函数4、格式化形式读写函数文件的顺序读写顺序读写:文件中有一个位置指针,指向当前读写的位置。每次读写一个字符后,位置指针自动指向下一个字符位置。1、字符形式读写函数读字符:从指定文件读入一个字符。

ch=fgetc(fp);写字符:把一个字符写到磁盘文件去。

fputc(ch,fp)文件结束判断ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}while(!feof(fp)){c=fgetc(fp);

……}EOF(即-1):文本文件的结束标志。因为ASCII码不可能出现-1因为二进制文件可能出现-1,所以必须使用feof()进行文件结束判断。例9.2读入文件myfile.c,在屏幕上输出。#include<stdio.h>main(){FILE*fp;charch;if((fp=fopen("myfile.c","r"))==NULL){printf("\nCannotopenfile);exit(0);}

ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fclose(fp);}2、字符串形式读写函数fgets函数的作用:是从指定文件读入一个字符串。

fgets(str,n,fp);/*n为要求得到的字符个数,但只从fp指向的文件读入n-1个字符,然后在最后加一个'\0',共n个字符存入字符数组str中*/fputs函数的作用:是向指定的文件输出一个字符串。

fputs(str,fp);3、组数据形式读写函数一般调用形式

fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);

其中:

buffer存放数据的地址;

size:要读写的字节数;

count:读写的份数,即多少份size字节数据。

fp:文件型指针。例9.3有5个学生,每个学生包括学号、姓名、3门课成绩和平均成绩。计算平均成绩并写入文件score.dat....fp=fopen("score.dat","w");for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(strucstudent),1,fp)!=1)printf("\nFileWriteerror!");fclose(fp);从score.dat中读入数据并显示....fp=fopen("score.dat","r");for(i=0;i<5;i++){if(fread(&stu[i],sizeof(strucstudent),1,fp)!=1)printf("\nFileReaderror!");printf("\n%s,%s,%d,%d,%d,%.1f",stu[i].sno,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);}fclose(fp);4、格式化形式读写函数与scanf/printf函数相仿,完成格式化读/写。一般调用方式

fprintf(文件指针,格式字符串,输出表列);fscanf(文件指针,格式字符串,输入地址表列);举例

fprintf(fp,"%d,%6.2f",i,t);fscanf(fp,"%d,%f",&i,&t);格式读写的不足存在频繁转换数据而浪费时间的不足:

1)fscanf函数在输入时要将ASCII码转换成二进制形式。

2)fprintf函数在输出时要将二进制形式转换成ASCII码形式。例9.4通过多种方式向test.dat文件中写入数据#include<stdio.h>main(){char*s="Verygood!";inti=85;FILE*fp;fp=fopen("test.dat","w");

fputs("Yourscorecomputerprogram",fp);

fputc(':',fp);fprintf(fp,"%d\n",i);fprintf(fp,"%s",s);fclose(fp);}9.3.4文件的随机读写1、文件位置指针2、文件指针位置移动文件的随机读写文件的随机读写:通过移动文件内部的位置指针到需要读写的位置,再进行读写来实现,这种读写方式称为随机读写。实质:实现随机读写的关键是要按要求移动位置指针,这种移动称为文件的定位。

1、文件位置指针每个打开的文件都有一个位置指针,指向文件当前读写的位置。当调用fopen函数打开文件时,文件位置指针总是指向文件开头的第1个字节之前。2、文件指针位置移动1、rewind函数2、fseek函数3、ftell函数1、rewind函数作用:是使位置指针重新返回文件的开头。调用方式:

rewind(文件指针);2、fseek函数和随机读写调用一般形式:

fseek(文件类型指针,位移量,起始点)调用一般形式:

fseek(文件类型指针,位移量,起始点)起始点名字用数字代表文件开始SEEK

温馨提示

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

评论

0/150

提交评论