文件操作系统管理数据的基本单位存储在外存储器上的数据的.ppt
《文件操作系统管理数据的基本单位存储在外存储器上的数据的.ppt》由会员分享,可在线阅读,更多相关《文件操作系统管理数据的基本单位存储在外存储器上的数据的.ppt(61页珍藏版)》请在三一办公上搜索。
1、,文件操作系统管理数据的基本单位存储在外存储器上的数据的集合使用文件的目的程序与数据分离:数据文件的改动不引起程序的改动数据共享:不同程序可以访问同一数据文件中的数据能长期保存程序运行的中间数据或结果数据,第9章 文件操作,本章要求:,掌握C语言中文件的概念掌握打开文件的不同模式掌握使用各种操作函数对文件进行读写的方法能编写与文件有关的程序,本章难点:掌握文件的各种操作函数,能对文件进行读写数据操作。,本章重点:掌握文件的各种操作函数,能对文件进行读写数据操作。,第9章 文件操作,9.1.1 文本文件与二进制文件,C语言把文件看作一个字节序列,即由一连串的字节组成,称为“流”,每一个字节都可以
2、单独读取,每一个文件或者以文件结束标志结束,或者在特定的字节号处结束。按数据的组织形式分类 1、文本文件又称ASCII文件,每个字节对应一个字符,用于存放该字符的ASCII码,输入输出时对字符逐个处理。文本文件由文本行组成,每行中可以有0个或多个字符,并以行终止符n结尾,文件结尾是文件结束标志,该标志后再没有字符出现了。2、二进制文件数据按其在内存中的存储形式原样存放,00100111 00010000,内存存储形式,00100111 00010000,二进制形式,00110001 00110000 00110000 00110000 00110000,ASCII形式,文本文件特点:速度慢、便
3、于对字符操作,二进制文件特点:速度快、便于存放中间结果,【例】整数10000,9.1.2 缓冲文件系统,缓冲文件系统:系统自动地为每一个正在使用的文件在内存中开辟一个缓冲区。对输入输出进行缓冲,可以大块地转移信息,而不再是一个个字节进行操作。内存缓冲区的大小,影响着操作外存的次数。内存缓冲区越大,则操作外存的次数就少,执行速度就快、效率高。,9.1.3 文件类型指针,C语言的缓冲文件系统中,用文件类型指针来表示文件。定义文件类型指针的一般形式:,FILE*指针变量名;,C编译系统定义的一种结构体类型,其中的成员用于存放有关文件的一些信息(文件名、文件状态和文件当前读写位置等),指针变量用于指向
4、一个文件,实际上是用于存放文件缓冲区的首地址。,FILE结构体是在头文件中定义的,对文件操作的程序,在最前面都应写上文件包含命令:#include C语言通过文件指针变量对文件进行打开、读、写及关闭操作。,FILE结构体类型在头文件stdio.h中定义如下:typedef structshort level;/*文件缓冲区占用程度*/unsigned flags;/*文件状态标志*/char fd;/*文件描述符*/unsigned char hold;/*若无缓冲区不读取字符*/short bsize;/*文件缓冲区大小*/unsigned char*buffer;/*数据缓冲区的位置*/u
5、nsigned char*curp;/*指针当前的位置*/unsigned istemp;/*临时文件指示器*/short token;/*用于操作有效性检查*/FILE;/*文件类型符*/,9.1.3 文件类型指针,在编程时不必关心FILE结构的具体细节,只需在使用I/O函数时用这个文件指针变量来指定所操作的文件。,9.1.3 文件类型指针,在C语言程序中使用文件,需要完成以下工作:1)声明一个FILE类型的文件指针变量;2)打开文件:调用fopen函数将此文件指针变量和某一个实际的磁盘文件相联系。要求指定文件名,并且说明对该文件是输入操作还是输出操作。3)读写文件:调用适当的文件操作函数完
6、成必要的I/O操作。对输入文件来说,函数从文件中将数据读取至程序中;对输出文件来说,函数将程序中的数据转移到文件中去。4)关闭文件:调用fclose函数表明文件操作结束,断开文件指针与实际文件之间的联系。,9.2 文件的打开与关闭,9.2.1 文件的打开,打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件;缓冲文件系统借助文件指针来对文件进行管理和访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数据。,“文件名”和“文件打开模式”都是字符串常量或字符数组。,文件指针名=fopen(文件名,文件打开模式),需要打开的文件的名字,确定文件的数据操作方式,打开文件使用函数fo
7、pen其调用的一般形式为:,举 例,FILE*fp;fp=fopen(source.txt,r);,作用:以读的方式(“r”模式即表示读“read”)打开当前目录下文件名为source.txt的文件。如果打开文件成功,则返回一个指向source.txt文件信息区的起始地址的指针,并赋值给fp,即fp指向了文件source.txt。其后所有对该文件的操作都必须通过fp指针来实现。如果文件打开失败,则返回一个空指针NULL,赋值给fp。说明:文件名可以包含路径和文件名两部分。写路径时,因为转义字符以反斜杠开头,所以“”才是表示一个反斜杠。【例】若路径和文件名为:“c:tcsource.txt”,则
8、应写成“c:tcsource.txt”。,9.2.1 文件的打开,文件的打开模式,9.2.1 文件的打开-模式说明,1)“r”模式:只能用于输入(读操作),且只能打开一个已经存在的文件。2)“w”模式:只能用于输出(写操作)。如果指定的文件不存在,则新建一个文件;如果文件存在,则把原来的文件删除,再重新建立一个空白的文件。3)“a”模式:用于追加操作。如果指定的文件不存在,则新建该文件;如果文件存在,保留该文件原有的数据,在原文件的末尾添加新的数据。4)打开方式带上“b”表示是对二进制文件进行操作。带上“+”表示既可以读,又可以写。而对待文件存在与否的不同处理则按照“r”、“w”、“a”各自的
9、规定。5)如果在打开文件时发生错误,即打开失败,fopen返回一个空指针NULL。,文件打开可能出现的错误有:试图以“读”模式(带“r”的方式)打开一个并不存在的文件;试图以“写”方式(带“w”或“a”的方式、“r+”或“rb+”方式)打开被设置为“只读”属性的文件。新建一个文件,而磁盘上没有足够的剩余空间或磁盘被写保护。用不正确的模式打开一个文件可能会破坏文件的内容。为避免因上述原因的出错,常用以下的方法来打开一个文件:,9.2.1 文件的打开-模式说明,if(fp=fopen(source.txt,r)=NULL)printf(This file could not be opened!n
10、);exit(0)/*返回操作系统*/else/*此处编写对文件读/写的代码*/,#include,9.2 文件的打开与关闭,9.2.2 文件的关闭,【例】fclose(fp)关闭由指针fp指定的文件,同时根据需要刷新缓冲区。如果文件成功关闭,fclose函数将返回值0,否则返回EOF。,fclose(文件指针变量);,对文件的操作完成后,应确保关闭程序中打开的文件,以避免文件的数据丢失。关闭文件指断开指针与文件之间的联系,也就禁止再对该文件进行操作。磁盘已满、磁盘被移走或者出现I/O错误等都会导致fclose函数执行失败。,9.2 文件的打开与关闭,不关闭文件可能会丢失数据,9.3 文件的读
11、写,使用fopen成功打开文件后,都会有属于该文件的一个文件读写位置指针,表示文件内部即将要读写的位置。文件指针和文件内部的读写位置指针是不同的,9.3.1 文件读写函数概述,9.3 文件的读写,文件指针和文件内部的读写位置指针是不同的文件指针指向整个文件,在程序中定义,只要不重新赋值,文件指针的值不变。文件内部的读写位置指针用于指示文件内部的当前读写位置,每读写一次,该指针均自动向后移动,指向下一个读写单元。它不需在程序中定义,由系统自动设置。以“r”或“w”方式打开文件后,该文件读写位置指针初始值指向文件开头;以“a”方式打开文件后,该文件读写位置指针初始值指向文件末尾。,9.3 文件的读
12、写,对文件进行读写操作时,需要判断当前读写位置,如果文件读操作到最后,再进行读写操作就会出错。为了避免出错,C提供了下面的方式判断文件是否读完1、对于文本文件,结束标记是EOF(即-1,在stdio.h中定义),可以通过读取的字符是不是结束标记来判断文本文件是否读完;2、对于二进制文件,没有EOF的结束标志,只能使用系统提供的feof函数来判断;其中,fp是文件指针变量,如果文件读取结束则返回非0值,没结束返回0值。3、文本文件可使用feof函数按上面形式来判断是否读取结束。,while(!feof(fp)/*此处写入读操作语句*/,使用格式是:feof(fp),9.3 文件的读写,9.3.2
13、 字符读写函数,(1)字符读函数fgetc()功能:从指定的文件中读一个字符;函数调用的一般形式:字符变量=fgetc(文件指针变量);【例】ch=fgetc(fp1);/*从fp1指向的文件中读取一个字符并送入变量ch中*/说明:在fgetc函数调用中,读取的文件必须是以读或读写方式打开的读取成功返回文件当前位置的一个字符;读错误时返回EOF。,9.3 文件的读写,9.3.2 字符读写函数,(2)字符写函数fputc()功能:将一个字符写入到指定文件中;函数调用的一般形式:fputc(字符变量,文件指针变量);【例】fputc(ch,fp2);/*将字符变量ch中的字符写入到fp2所指的文件
14、中*/说明:fputc函数也有返回值若写操作成功,则返回向文件所写的字符;否则返回EOF,表示写操作失败。,例 9-1 用依次读取字符的方式,将source.txt文件的内容复制到destination.txt文件中。,9.3 文件的读写,void main()FILE*fp1,*fp2;char ch;if(fp1=fopen(C:source.txt,r)=NULL)printf(File could not be opened!n);exit(0);if(fp2=fopen(C:destination.txt,w)=NULL)printf(File could not be opened
15、!n);exit(0);while(ch=fgetc(fp1)!=EOF)fputc(ch,fp2);fclose(fp1);fclose(fp2);,9.3.3 字符串读写函数,(1)字符串读函数fgets()功能:从指定的文件中读取一个字符串到程序中的字符数组函数调用的一般形式:参数n是一个正整数,表示从文件中读出的字符串不超过n-1个字符。因为要在读入的最后一个字符后加上字符串结束标志0。说明:fgets函数从文件中读取字符直到遇见回车符或EOF为止,或直到读入了所限定的字符数(至多n-1个字符)为止。函数读成功返回字符数组首地址;失败返回空指针NULL。,9.3 文件的读写,fgets
16、(字符数组名,n,文件指针);,9.3.2 字符读写函数,(2)字符串写函数fputs()功能:将一个字符串写入到指定文件中函数调用的一般形式:字符串可以是字符串常量,也可以是字符数组名,或字符指针变量。【例】char*ch=You Are Good!fputs(ch,fp2);/*将字符指针ch指向的字符串写入到文件fp2中*/说明:若函数调用fputs返回值为EOF时,表明写操作失败。,9.3 文件的读写,fputs(字符串,文件指针),例9-2 修改例9-1程序,用读取字符串的方式,将source.txt文件的内容复制到destination.txt文件中。,9.3 文件的读写,void
17、 main()FILE*fp1,*fp2;char ch80;if(fp1=fopen(C:source.txt,r)=NULL)printf(File could not be opened!n);exit(0);if(fp2=fopen(C:destination.txt,w)=NULL)printf(File could not be opened!n);exit(0);while(!feof(fp1)fgets(ch,81,fp1);fputs(ch,fp2);fclose(fp1);fclose(fp2);,9.3 文件的读写,字符读写函数:fgetc()和fputc()字符串读写函
18、数:fgets()和fputs()格式读写函数:fscanf()和fprintf()数据块读写函数:fread()和fwrite(),9.3.4 格式读写函数,(1)格式化读函数fscanf功能:从指定的文件中按照一定的格式读取数据到程序中fscanf与scanf功能相似,区别在于fscanf的读取对象是磁盘文件,scanf的读取对象是键盘。函数调用的一般形式:其中,格式字符串和输入表列和scanf函数相似。【例】fscanf(fp,%5d,说明:函数的返回值若为EOF,表明格式化读错误;否则读数据成功。,9.3 文件的读写,fscanf(文件指针,格式字符串,输入表列);,(2)格式化写函数
19、fprintf功能:把格式化的数据写到指定文件中fprintf与printf功能相似,区别在于fprintf是向文件中输出,而printf是向屏幕输出。函数调用的一般形式:其中,格式控制字符串和输出项列表和printf函数相似。【例】fprintf(fp,%5d,ai);说明:函数的返回值为实际写入文件中的字符个数(字节数);若写错误,则返回一个负数。,9.3 文件的读写,9.3.4 格式读写函数,fprintf(文件指针,格式控制字符串,输出项列表);,例9-3 随机产生20个10,99之间的整数,以每行5个数据输出到文本文件c:data.txt中,要求每个数据占5个宽度,并且数据之间用逗号
20、分隔。然后将其读出按升序排序后,按同样格式追加写在原文件后,与原数据之间空出2行。编程分析:采用模块化程序设计将产生数据、将数据输出到文件、从文件中读取数据,排序和追加数据到文件分别写成GetData()、PutDataToFile()、GetDataFormFile()和sort()、AppendDataToFile()函数,9.3 文件的读写,void main()int a20,i;GetData(a,20);PutDataToFile(a,20);/*调用scandata()函数将数据读入到数组a中*/GetDataFormFile(a,20);sort(a,20);/*调用sort(
21、)函数将数组a的数据排序*/*调用AppedDataToFile()函数将排序后的数组a的数据写入到文件中*/AppendDataToFile(a,20);void GetData(int a,int n)int i;srand(time(NULL);/*初始化随机种子数*/for(i=0;in;i+)ai=(rand()%90)+10;/*产生10,99的随机整数*/,9.3 文件的读写,void PutDataToFile(int a,int n)int i;OpenFile(c:data.txt,w);for(i=0;in;i+)if(i%5=0)fprintf(fp,%5d,ai);e
22、lse fprintf(fp,%5d,ai);if(i+1)%5=0)fprintf(fp,n);fclose(fp);void GetDataFormFile(int a,int n)/*从文件读数据函数*/int i;OpenFile(c:data.txt,r);for(i=0;in;i+)if(i%5=0)fscanf(fp,%5d,9.3 文件的读写,void sort(int a,int n)int i,j,k,t;for(i=0;iaj)k=j;t=ai;ai=ak;ak=t;void OpenFile(char*file,char*pr)if(fp=fopen(file,pr)=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文件 操作系统 管理 数据 基本单位 存储 在外 存储器
链接地址:https://www.31ppt.com/p-5063080.html