电脑基础知识c语言教学课件续_第1页
电脑基础知识c语言教学课件续_第2页
电脑基础知识c语言教学课件续_第3页
电脑基础知识c语言教学课件续_第4页
电脑基础知识c语言教学课件续_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、第十八次课教案(续)章节名称:第11章 文 件教学目的与要求:掌握文件的概念,掌握打开文件、关闭文件及对文件进行读写操作的方法。能够对文件进行简单的读写操作。教学内容:1. 文件的概念及文件类型指针2. 文件的打开与关闭3. 文件的读写4. 文件的定位与随机读写重点: 2、3、4难点: 1作业:完善课程设计简单版中数据的存储。教学过程:ppt课件,提问回答8/3/2022111.1文件概述一、文件分类(一)文件 文件是存储在外存储器上信息的集合。每个文件有唯一的名称(文件名.扩展名)来标识。计算机通过名称对文件进行读、写、修改或删除等操作。文件可以从不同的角度进行分类,例如按照文件保存的内容区

2、分,磁盘文件可以分为程序文件和数据文件。8/3/20222程序文件保存的是程序,读写操作一般由系统完成;数据文件用于保存数据,其读写往往由应用程序实现。从广义上说,文件是指信息输入和输出的对象,磁盘文件、键盘、显示器、打印机等均可视为文件。如DOS将打印机和键盘分别命名为 PRN和CON的两个专用设备文件名。8/3/20223(二)数据文件的存储形式C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII码文件和二进制文件。ASCII码文件是将数据以字符形式存放,又称为文本文件。二进制文件是把内存中的数据按其在内存中的存储形式原样输

3、出到磁盘上存放。8/3/20224一个任意int型整数,其二进制存储方式都是占4个字节;而字符存储方式所占字节数该数的数字个数。int型数 2978 二进制存储方式 字符存储方式用户可以自己选择存储方式,若阅读则选择文本文件,否则为了节省时间和空间应该选二进制文件。00001011 1010001000110010 39 37 388/3/20225一般地说,二进制文件节省存储空间,用户程序在实用中,从节省时间和空间的要求考虑,一般选用二进制文件。但是如果用户准备的数据是作为文档阅读使用的,则一般使用文本文件,它们可以方便、快捷地通过显示器或打印机直接输出。8/3/20226(三)缓冲文件与非

4、缓冲文件1. 缓冲文件又称为标准I/O文件或高级文件系统;是指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。当从磁盘文件读数据时,应用程序并不直接从磁盘文件读取数据,而是先由系统将一批数据从磁盘取入内存缓冲区,然后再从缓冲区依次将数据送给程序中的接收变量,供程序处理。在向磁盘文件写入数据时,先将程序中有关变量或表达式的值送到缓冲区中,待缓冲区装满后,才由系统将缓冲区的数据一次写入磁盘文件中。这样做减少了系统读写磁盘的次数,提高了程序的执行效率。 8/3/202272. 非缓冲文件又称为系统I/O文件或低级文件系统。是指系统不自动开辟确定大小的缓冲区,而由程序本身根据需要设定。ANSI

5、 C标准决定不采用非缓冲文件系统,而只采用缓冲文件系统。即既用缓冲文件系统处理文本文件,也用它来处理二进制文件。8/3/20228(四)文件存取方式C语言的数据文件由顺序存放的一连串字节(字符)组成,没有记录的界限,因此,C语言的文件被称作流式文件,文件存取操作的数据单位是字节,允许存取一个字节和任意多个字节,增加了文件操作的灵活性。缓冲文件系统提供了4种文件存取方法:(1) 读写一个字符。(2) 读写一个字符串,将多个字符组成的字符串写入文件或从文件中读出。(3) 格式化读写,根据格式控制指定的数据格式对数据进行转换存取。(4) 成块读写。有相应的函数来完成上述的操作。8/3/20229二、

6、文件指针 缓冲文件系统中,关键的概念是“文件指针”。每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件的名字、文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统定义的,取名为FILE。Turbo C在stdio.h文件中定义了FILE类型。 8/3/202210typedef structshort level;unsigned flags;char fd;unsigned char hold;short bsize;unsigned char *buffer;unsigned char *curp;unsigned istemp;short tok

7、en;FILE;8/3/202211有了结构体FILE类型之后,可以用它来定义FILE类型变量,以便存放文件的信息。FILE f1,f2;FILE *fp;fp是一个指向FILE类型的指针变量。可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。也就是说,通过文件指针变量能够找到与它相关的文件。如果程序同时对n个文件进行操作,一般应设n个指针变量,使它们分别指向n个文件(即指向存放该文件信息的结构体变量),以实现对文件的访问。 8/3/202212三、文件的打开与关闭 对磁盘文件的操作往往包括打开文件、读文件、写文件、关闭文件或删除文件等。任何一个文件操作,都

8、必须先打开,后读或写;读写完成后,最后都应关闭文件。1、文件的打开即在程序和系统间建立联系,程序将文件名及操作方式通知给系统。8/3/202213FILE *fopen( char *filename,char *mode);需要用#include “stdio.h” 函数的功能是打开一个filename指向的文件,文件使用方式由mode指向的值决定。函数的返回值是一个文件指针。例如:FILE *fp;fp=fopen(a1,r);8/3/202214若要打开文件的文件名已放在一个字符数组中或已由一个字符指针指向它,可通过该字符数组或字符指针来打开该文件。如:FILE *fp;char c5=

9、 a1;fp=fopen(c,r);文件名中也可以包含用双反斜线隔开的路径名d:turboc2a18/3/2022158/3/202216当用fopen()函数成功地打开一个文件时,该函数将返回一个FILE指针;如果文件打开操作失败,则函数返回值是NULL,即一个空指针。FILE *fp;if(fp=fopen(file1,w)=NULL)printf(file cannot be openedn);exit(1);elseprintf(file opened for writingn); 这里使用exit()函数返回操作系统,该函数将关闭所有打开的文件。若打开的是一个已存在的文件,且使用方式

10、为“W”或“wb”,则文件原有内容将被新写入的内容覆盖。8/3/202217对磁盘文件,在使用前一定要打开,而对外部设备,尽管它们也可以作为设备文件处理,但在以前的应用中并未用到“打开文件”的操作。这是因为当运行一个C程序时,系统自动地打开了5个设备文件,并自动地定义了5个FILE结构指针变量。8/3/2022188/3/2022192、文件的关闭程序对文件的读写操作完成后,必须关闭文件。这是因为对打开的磁盘文件进行写入时,若文件缓冲区的空间未被写入的内容填满,这些内容将不会自动写入打开的文件中,从而导致内容丢失。int fclose(FILE *stream);例如,fclose(fp1);

11、表示将关闭FlLE结构指针变量fp1对应的文件,并返回一个整数值。若成功地关闭了文件,则返回一个0值;否则返回一个非零值。8/3/202220if(fclose(fp)!=0)printf(File cannot be closedn);exit(1);elseprintf(File is now closedn);若要同时关闭程序中已打开的多个文件可使用fcloseall()函数。若程序已打开3个文件,当执行n=fcloseall();时,这3个文件将同时被关闭,且使n的值为3。8/3/20222111.2 文件的读写一、 字符读写fputc()函数和fgetc()函数每执行一次,读写文件中

12、的一个字符。1. fputc()函数int fputc(char ch,FILE *fp);其中:ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。函数的作用是把一个字符(ch的值)写入到由指针变量fp所指定的文件中。fputc()函数有一个返回值;如果执行此函数成功就返回被输出的字符,否则就返回EOF(-1)。EOF是在stdio.h文件中定义的符号常量,值为-1。8/3/202222例11.1 从键盘输入5个字符,逐个把它们写到磁盘文件file1中。#include stdio.h#include stdlib.hmain()char ch; int i;

13、FILE *fp;if(fp=fopen(file1,w)=NULL)printf(cannot open filen);exit(1);for(i=1;i0)/*测试读入的字符串长度是否为0*/fputs(a,fp); /*写入磁盘文件*/fputs(n,fp); /*添加分隔标志*/gets(a);/*再从键盘读一行字符*/fclose(fp);8/3/202231三、格式化读写fprintf()和fscanf()函数在实际应用中,应用程序有时需要按照规定的格式进行文件读写,这时可以利用格式化读写函数fscanf()和fprintf()来完成。1. fprintf()函数把若干个输出项按照

14、指定的格式写到磁盘文件上去。int fprintf(FILE *fp,char *format,);2. fscanf()函数从磁盘文件中按照指定的格式读取数据。int fscanf(FILE *fp,char *format,);8/3/202232scanf()是从stdin标准输入设备(键盘)输入,printf()是向stdout标准输出设备(显示器)输出;fscanf()和fprintf()则是从文件指针指定的文件输入或是向文件指针指定的文件输出。fprintf(fp,%s%d%d,var1,var2,var3);fscanf(fp,%s%d%d,var1,&var2,&var3);8

15、/3/202233例11.7 从键盘输入10个学生的学号、姓名、性别和入学成绩,用格式化方式写入磁盘文件中。#include stdio.hstruct stulong num;char name9,sex3;float score;8/3/202234main()FILE *fp;int i;struct stu a;if (fp=fopen(datafile,w)=NULL)printf(File connot be openedn);exit(1);8/3/202235for(i=1;i=10;i+)scanf(%ld,&a.num);scanf(%s,);scanf(%s,

16、a.sex);scanf(%f,&a.score);fprintf(fp,%ldt%9st%3st%6.2fn,a.num,,a.sex,a.score);fclose(fp);8/3/202236四、块数据读写fwrite()函数和fread()函数用于从文件中读写一个数据块。1. fwrite()函数把数据块写入到磁盘文件中。int fwrite(char *ptr,unsigned size,unsigned n,FILE *fp);ptr是要写入的数据块在内存中的首地址,size是字节数,表示数据块的大小,n表示数据块的个数,fp是文件类型的指针。函数的作用是将从ptr地址

17、开始,每块size字节,一共n块数据写入到由fp所指向的文件中。8/3/202237 for(i=0;i10;i+) scanf(%ld,&ai.num);scanf(%s,);scanf(%s,ai.sex);scanf(%d,&ai.score);fwrite(&ai,sizeof(STU),1,fp);8/3/2022382. fread()函数从一个磁盘文件中读取数据块。int fread(char *ptr,unsigned size,unsigned n,FILE *fp);fread()函数与fwrite()函数是相对应的。fread()也有4个参数,其含义与fwr

18、ite()中基本相同,只是fread()中的ptr是读出数据块的存放地址。例:fread(&ai,sizeof(STU),1,fp); 8/3/20223911.3随机文件和定位操作一、随机文件上面介绍的对文件的读写都是顺序读写,即从文件的开头逐个数据读或写。文件中有一个“读写位置指针”,指向当前读或写的位置。在顺序读写时,每读或写完一个数据后该位置指针就自动移到它后面一个位置。只要能移动位置指针到所需的地方,就可不按文件的物理顺序逐个地读写数据项,实现文件的随机读写。 8/3/202240二、定位操作1、rewind()函数void rewind(FILE *fp);将fp指向的文件的位置指

19、针置于文件开头位置,并清除文件结束标志和错误标志。函数无返回值。例如:rewind(fp);将fp所指向文件的位置指针从当前位置移到文件的开头。8/3/202241例11.10 有一个磁盘文件,第一次将它的内容显示在屏幕上,第二次将它复制到另一文件上。#include stdio.hmain()FILE *fp1,*fp2;if(fp1=fopen(file1,r)=NULL)printf(cannot open filen);exit(1);if(fp2=fopen(file2,w)=NULL)printf(cannot open filen);exit(1);while(!feof(fp1

20、) putchar(fgetc(fp1);rewind(fp1);while(!feof(fp1) fputc(fgetc(fp1),fp2);fclose(fp1); fclose(fp2);8/3/2022422、fseek()函数int fseek(FILE *fp,long offset,int origin);其中fp指向需要操作的文件;origin指明以什么地方为起点进行指针移动,起点位置见下图。8/3/202243fseek()函数中的offset是位移量,是以origin为基准指针向前或向后移动的字节数。所谓向前是指从文件开头向文件尾移动的方向;向后则反之。位移量的值如果为负,

21、表示指针向后移动。位移量应为long型数据。例如:fseek(fp,10L,SEEK_SET);其作用是把文件指针从文件开头移到第10个字节处。下面的写法与其功能是一致的:fseek(fp,10L,0);8/3/202244fseek(fp,-10L,SEEK_END);把位置指针从文件尾往回移动10个字节。fseek(fp,-5L,1);把位置指针从现行位置往回移动5个字节。fseek(fp,0L,2);把位置指针移到文件末尾。若fseek()函数调用成功,返回值为0;否则返回一个非零值。8/3/2022453、ftell()函数ftell()函数用于得到文件的位置指针离开文件起点(即文件开头)的偏移量(即偏移的字节数)long ftell(FILE *fp);如果函数调用出错(例如该文件不存在),则函数的返回值是-1L。由于文件中的位置指针经常移动,人们往往不容易知道其当前位置。用ftell()函数可以得到当前位置。例如:n=ftell(fp);长整型变量n存放当前位置。8/3/20224611.4 文件的状态检测

温馨提示

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

评论

0/150

提交评论