




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文件0实用精品课件PPT引子输入输入处理处理输出输出键盘键盘内存内存显示器显示器磁盘磁盘磁盘磁盘文件文件scanfgetchargets.printfputcharputs.1实用精品课件PPT第十一章 文件本章学习要点本章学习要点q 正确理解文件的概念,文件系统的特点;正确理解文件的概念,文件系统的特点;q 掌握文件指针的概念和定义方法;掌握文件指针的概念和定义方法;q 熟练使用文件读写函数,学会定位文件指熟练使用文件读写函数,学会定位文件指针。针。掌握本章内容的捷径:掌握本章内容的捷径:1.对文件永远是:打开对文件永远是:打开操作操作关闭关闭2.学会文件操作库函数学会文件操作库函数(即标准
2、即标准I/O库函数库函数)的用法的用法2实用精品课件PPT第十一章 文件文件概述文件处理文件顺序读写文件随机操作文件检测文件实例3实用精品课件PPT11.1 文件概述一一文件的定义文件的定义 存储在外部介质上存储在外部介质上(如磁盘和磁带等如磁盘和磁带等外存储器外存储器)的数据或信息的集合。的数据或信息的集合。例如:程序文件中保存着程序,而数据文件例如:程序文件中保存着程序,而数据文件中保存着数据。中保存着数据。main.cC语言源程序语言源程序 文本文件文本文件main.obj目标文件目标文件 二进制文件二进制文件main.exe可执行文件可执行文件 二进制文件二进制文件4实用精品课件PPT
3、11.1 文件概述一一文件的性质文件的性质 文件是一个有序的数据序列,数据之文件是一个有序的数据序列,数据之间有着严格的排列次序关系,间有着严格的排列次序关系,可以按照可以按照它们的排列顺序,依次进行访问,也可它们的排列顺序,依次进行访问,也可以按照需要,访问任意位置上的数据。以按照需要,访问任意位置上的数据。5实用精品课件PPT一一系统对文件的处理过程系统对文件的处理过程 系统对文件的处理过程就是对文件进行输入系统对文件的处理过程就是对文件进行输入/ /输出操作的过程。输出操作的过程。文件文件程序程序数据区数据区输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区计算机内存计算机内存计算
4、机外存计算机外存写文件称为输出写文件称为输出读文件称为输入读文件称为输入6实用精品课件PPT11.1 文件概述一一文件的分类文件的分类文本文件文本文件二进制文件二进制文件普通文件普通文件(磁盘文件磁盘文件)特殊文件特殊文件(标准设备文件标准设备文件)缓冲文件系统缓冲文件系统非缓冲文件系统非缓冲文件系统7实用精品课件PPTq 从文件数据的组织形式从文件数据的组织形式( (存储格式存储格式) )看看lASCII文件文件(或称文本文件,即或称文本文件,即TEXT文件文件) 文本文件中的数据采用文本文件中的数据采用ASCII码格式存储,码格式存储,全部数据转换为全部数据转换为ASCII码。每个码。每个
5、ASCII字符字符占占1个字节。个字节。ASCII文件使用文本编辑器可文件使用文本编辑器可直接阅读。直接阅读。l二进制文件二进制文件 对数据在内存中的二进制存储格式不做任何对数据在内存中的二进制存储格式不做任何转换,直接存入文件,形成二进制文件。二进转换,直接存入文件,形成二进制文件。二进制文件在操作系统下不能直接阅读。制文件在操作系统下不能直接阅读。8实用精品课件PPT11.1 文件概述 例如:将整数例如:将整数1024分别存储到分别存储到ASCII文件和二进文件和二进制文件中,将采用不同的编码形式,占用不同的制文件中,将采用不同的编码形式,占用不同的字节长度。字节长度。内存中的存储形式:内
6、存中的存储形式:补码补码0000 0100 0000 0000ASCII文件文件:ASCII码码1024二进制文件二进制文件:补码:补码0000 0100 0000 0000占占4个字节个字节占占2个字节个字节9实用精品课件PPT 比较:比较: ASCII文件中,每个字符以文件中,每个字符以ASCII码形式存储,方码形式存储,方便对字符的逐个处理;在操作系统下或使用文本编便对字符的逐个处理;在操作系统下或使用文本编辑器时,可以辑器时,可以直接阅读、修改直接阅读、修改,方便与其它系统进,方便与其它系统进行数据交换。行数据交换。 缺点是缺点是占用磁盘存储空间多占用磁盘存储空间多,并且系统要付出将,
7、并且系统要付出将内存中的二进制形式内存中的二进制形式转为转为ASCII码的时间开销码的时间开销。 用二进制形式输出,可以节省磁盘空间和转换时用二进制形式输出,可以节省磁盘空间和转换时间,但输出的数据因为是内存中的格式,在操作系间,但输出的数据因为是内存中的格式,在操作系统下和一般的编辑器中统下和一般的编辑器中不能直接识别不能直接识别。10实用精品课件PPT11.1 文件概述q 从用户观点看从用户观点看l普通文件普通文件(也称为磁盘文件也称为磁盘文件)l特殊文件特殊文件(也称为标准设备文件或标准也称为标准设备文件或标准I/O文文件件) 普通文件是以磁盘为对象且无其它特殊性普通文件是以磁盘为对象且
8、无其它特殊性能的文件。能的文件。 特殊文件是以终端为对象的标准的设备文特殊文件是以终端为对象的标准的设备文件。件。11实用精品课件PPT11.1 文件概述 在在C语言中,语言中,“文件文件”的概念具有更广泛的意的概念具有更广泛的意义。与每台主机相连的所有输入输出设备都看作义。与每台主机相连的所有输入输出设备都看作是一个文件。是一个文件。即将实际的物理设备抽象为逻辑文即将实际的物理设备抽象为逻辑文件件,它们也被称为设备文件。,它们也被称为设备文件。 例如:例如:l键盘是输入文件键盘是输入文件 stdin(标准输入文件标准输入文件)l显示器是输出文件显示器是输出文件 stdout(标准输出文件标准
9、输出文件)l打印机是输出文件打印机是输出文件 PRN12实用精品课件PPT11.1 文件概述q 从从C语言对文件的处理方法看语言对文件的处理方法看l缓冲文件系统缓冲文件系统l非缓冲文件系统非缓冲文件系统 缓冲文件系统:对每个正在使用的文件,缓冲文件系统:对每个正在使用的文件,系统自动在内存中为其开辟一个文件缓冲区。系统自动在内存中为其开辟一个文件缓冲区。称为高级文件操作。称为高级文件操作。 非缓冲文件系统:系统不会自动开辟缓冲非缓冲文件系统:系统不会自动开辟缓冲区,文件缓冲区是由程序自己设置的。称为区,文件缓冲区是由程序自己设置的。称为低级文件操作。低级文件操作。13实用精品课件PPT11.1
10、 文件概述 在在83年以后年以后ANSI C标准中取消了非缓冲文件系标准中取消了非缓冲文件系统,对文本文件和二进制文件均统一采用缓冲文统,对文本文件和二进制文件均统一采用缓冲文件系统进行处理。件系统进行处理。本课程学习:本课程学习: 缓冲式文件操作方式下,对磁盘文件进行基本缓冲式文件操作方式下,对磁盘文件进行基本操作。对文本文件和二进制文件有不同的处理方操作。对文本文件和二进制文件有不同的处理方式。使用标准输入式。使用标准输入/输出库输出库(stdio.h)函数来实现文函数来实现文件操作。件操作。14实用精品课件PPT第十一章 文件文件概述文件处理文件顺序读写文件随机操作文件检测文件实例15实
11、用精品课件PPT一一文件类型文件类型 FILE 在缓冲文件系统中,用一个在缓冲文件系统中,用一个 FILE 类型的结构类型的结构变量来描述一个文件,该结构变量用于存放文件变量来描述一个文件,该结构变量用于存放文件的有关信息,如文件名、文件状态等。的有关信息,如文件名、文件状态等。 在在C语言中,无论是一般磁盘文件还是设备文语言中,无论是一般磁盘文件还是设备文件,都要通过文件结构的数据集合进行输入输出件,都要通过文件结构的数据集合进行输入输出处理。处理。 文件结构不需要用户自己定义,是由系统事先文件结构不需要用户自己定义,是由系统事先定义好的,包含在头文件定义好的,包含在头文件 stdio.h
12、中,用户可以中,用户可以直接使用。直接使用。11.2 文件处理16实用精品课件PPT文件结构类型文件结构类型FILE:typedef struct int _fd; /*文件位置指针,即当前文件的读写位置文件位置指针,即当前文件的读写位置*/ int _cleft; /* 文件缓冲区中剩余的字节数文件缓冲区中剩余的字节数 */ int _mode; /* 文件操作模式文件操作模式 */ char * nextc; /*用于文件读写的下一个字符位置用于文件读写的下一个字符位置*/ char * _buff; /* 文件缓冲区位置文件缓冲区位置(指针指针) */ FILE ; 文件结构变量在打开文
13、件时由操作系统自动建立,文件结构变量在打开文件时由操作系统自动建立,用户使用文件时无需重复定义。用户使用文件时无需重复定义。 在使用文件的时候要使用文件包含命令:在使用文件的时候要使用文件包含命令: #include 类型说明语句类型说明语句typedef:定义新的类型来代替已有定义新的类型来代替已有类型:类型:typedef int INT17实用精品课件PPT11.2 文件处理一一如何引用文件结构如何引用文件结构文件指针文件指针 C语言中对文件的操作都要通过语言中对文件的操作都要通过指向该指向该文件结构的指针文件结构的指针。 文件指针变量说明形式:文件指针变量说明形式:FILE * 文件型
14、指针变量名文件型指针变量名;例如:例如:FILE * fp; /* fp 是一个指针变量是一个指针变量 */文件指针是程序和文件联系的纽带文件指针是程序和文件联系的纽带18实用精品课件PPT一一使用文件的一般步骤使用文件的一般步骤打开文件打开文件 操作文件操作文件 关闭文件关闭文件q打开文件打开文件:建立用户程序与文件的联系,为文:建立用户程序与文件的联系,为文件开辟文件缓冲区。件开辟文件缓冲区。q操作文件操作文件:是指对文件的读、写、追加和定位:是指对文件的读、写、追加和定位操作:操作:n读操作读操作:将文件中的数据读入计算机。:将文件中的数据读入计算机。n写操作写操作:向文件输出数据。:向
15、文件输出数据。n追加操作追加操作:将数据写到原有数据的后面。:将数据写到原有数据的后面。n定位操作定位操作:移动文件读写位置指针。:移动文件读写位置指针。q关闭文件关闭文件:切断文件与程序的联系,将文件缓:切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。冲区的内容写入磁盘,并释放文件缓冲区。19实用精品课件PPTq 打开文件打开文件(fopen) fopen函数的调用形式是:函数的调用形式是:FILE * fp;fp = fopen (文件名文件名, 文件使用方式文件使用方式); 文件名文件名:需要打开的文件名称:需要打开的文件名称(字符串字符串)。 文件使用方式文件使用方
16、式:是具有特定含义的符号。:是具有特定含义的符号。 函数功能:函数功能:n按指定的文件使用方式打开指定的文件。按指定的文件使用方式打开指定的文件。n若文件打开成功,则返回值为非若文件打开成功,则返回值为非NULL指针;指针;n若文件打开失败,返回若文件打开失败,返回NULL。为该文件建立一个文件为该文件建立一个文件结构结构(变量变量),然后让指,然后让指针指向该文件结构针指向该文件结构例:例:fp = fopen (file1, r)20实用精品课件PPT11.2 文件处理n文本文件的三种基本打开方式文本文件的三种基本打开方式n“r”:只读方式。为读:只读方式。为读(输入输入)文本文件打开文文
17、本文件打开文件。若文件不存在,则返回件。若文件不存在,则返回NULL。n“w”:只写方式。为写:只写方式。为写(输出输出)文本文件打开文本文件打开文件。若文件不存在,则建立一个新文件;文件。若文件不存在,则建立一个新文件;若文件已存在,则要将原来的文件清空。若文件已存在,则要将原来的文件清空。n“a”:追加方式。在文本文件的末尾增加数:追加方式。在文本文件的末尾增加数据。若文件已存在,则保持原来文件的内容,据。若文件已存在,则保持原来文件的内容,将新的数据增加到原来数据的后面;若文件将新的数据增加到原来数据的后面;若文件不存在,则创建。不存在,则创建。21实用精品课件PPTn二进制文件的三种基
18、本打开方式二进制文件的三种基本打开方式“rb”:只读方式:只读方式“wb”:只写方式:只写方式“ab”:追加方式:追加方式n文件的其它打开方式文件的其它打开方式“r+”:可对文本文件进行读:可对文本文件进行读/写操作。若文件不存在返写操作。若文件不存在返回回NULL;若文件存在,内容不会被清空。;若文件存在,内容不会被清空。“w+”:可对文本文件进行读:可对文本文件进行读/写操作。若文件已经存写操作。若文件已经存在,则要先将文件原来的内容清空。在,则要先将文件原来的内容清空。“a+”:可对文本文件进行读:可对文本文件进行读/追加操作。追加操作。“rb+”:可对二进制文件进行读:可对二进制文件进
19、行读/写操作。写操作。“wb+”:可对二进制文件进行读:可对二进制文件进行读/写操作。写操作。“ab+”:可对二进制文件进行读:可对二进制文件进行读/追加操作。追加操作。22实用精品课件PPTn常见文件打开操作常见文件打开操作if (fp = fopen (filename, r) = NULL ) printf (Cannot open file.n); exit (0); /*打开文件出错,调用库函数终止程序打开文件出错,调用库函数终止程序*/ 含义:以只读方式打开文件名为含义:以只读方式打开文件名为filename的文件。的文件。文件名可以是从盘符开始的完整路径名,也可文件名可以是从盘符
20、开始的完整路径名,也可以是相对路径。以是相对路径。11.2 文件处理23实用精品课件PPT11.2 文件处理v 练习:以下可作为函数练习:以下可作为函数fopen中第一个中第一个参数的正确格式是:参数的正确格式是: A. c:usertext.txtB. c:usertext.txt C. c:usertext.txtD. c:usertext.txt 24实用精品课件PPT11.2 文件处理 char * pfilename; if (fp = fopen ( pfilename, r) = NULL ) printf (Cannot open file.n); exit (0); 含义:以
21、只读方式打开以含义:以只读方式打开以 pfilename 指向的字符指向的字符串为文件名的文件。串为文件名的文件。25实用精品课件PPTq 关闭文件关闭文件(fclose) fclose函数的调用形式:函数的调用形式:FILE * fp; .fclose ( fp );fp:已经打开的文件指针。:已经打开的文件指针。函数功能函数功能n关闭关闭fp指定的文件,切断缓冲区与该文件的联系,指定的文件,切断缓冲区与该文件的联系,并释放文件指针。并释放文件指针。n若文件关闭成功,返回值为若文件关闭成功,返回值为0;n若文件关闭失败,返回非若文件关闭失败,返回非0值值。26实用精品课件PPT11.2 文件
22、处理q 系统标准设备文件系统标准设备文件 标准设备文件由系统自动打开和关闭,其标准设备文件由系统自动打开和关闭,其文件结构的指针由系统命名,用户在程序中文件结构的指针由系统命名,用户在程序中可直接使用。可直接使用。C语言中提供了三个标准设备文件的指针:语言中提供了三个标准设备文件的指针:lstdin 标准输入文件标准输入文件(键盘键盘)lstdout 标准输出文件标准输出文件(显示器显示器)lstderr 标准错误输出文件标准错误输出文件(显示器显示器)27实用精品课件PPT第十一章 文件文件概述文件处理文件顺序读写文件随机操作文件检测文件实例28实用精品课件PPT11.3 文件顺序读写一一文
23、件顺序操作文件顺序操作 对文件的操作对文件的操作(文件读写文件读写)必须按文件中字符的必须按文件中字符的先后顺序进行,只能在操作了第先后顺序进行,只能在操作了第i个字符之后,才个字符之后,才能操作第能操作第i+1个字符。个字符。在对文件操作时,文件的位置指针由系统自在对文件操作时,文件的位置指针由系统自动向前动向前(文件尾方向文件尾方向)移动。移动。29实用精品课件PPT11.3 文件顺序读写q 进行顺序操作的函数:进行顺序操作的函数:n字符输入输出函数字符输入输出函数 fgetc fputcn字符串输入输出函数字符串输入输出函数 fgets fputsn格式化输入输出函数格式化输入输出函数
24、fscanf fprintfn数据块输入输出函数数据块输入输出函数 fread fwrite30实用精品课件PPT键盘文件键盘文件内存内存显示器文件显示器文件磁盘文件磁盘文件磁盘文件磁盘文件scanfgetchargets.printfputcharputs.fscanffgetcfgetsfread.fprintffputcfputsfwrite.31实用精品课件PPT一一字符字符输入输出输入输出( fgetc / fputc )输入函数:输入函数: ch = fgetc(fp); fp为为已经打开的文件的指针已经打开的文件的指针函数功能:函数功能: 从指定的文件中读取一个字符。即:从指定的
25、文件中读取一个字符。即:从从fp所指向的文件所指向的文件(该文件必须是以读或读写方式该文件必须是以读或读写方式打开的打开的)中读取一个字符返回,读取的字符赋给变中读取一个字符返回,读取的字符赋给变量量ch。 若读取字符时文件已经结束或出错:若读取字符时文件已经结束或出错:n 对于对于ASCII文件,文件结束时,返回文件结束文件,文件结束时,返回文件结束标记标记EOF(-1);n 对于二进制文件,要使用对于二进制文件,要使用feof函数来判断文件函数来判断文件是否结束。是否结束。32实用精品课件PPT11.3 文件顺序读写输出函数:输出函数:fputc( ch, fp );ch为需要输出的字符为
26、需要输出的字符函数功能:函数功能:n 将一个字符输出到指定文件中。即将字符变将一个字符输出到指定文件中。即将字符变量量ch中的字符输出到中的字符输出到fp所指向的文件。所指向的文件。n 若输出操作成功,该函数返回输出的字符;若输出操作成功,该函数返回输出的字符;否则,返回否则,返回EOF。33实用精品课件PPT例:显示一个文本文件的内容例:显示一个文本文件的内容#include int main ( ) FILE * fp; char filename20, ch; printf (Enter filename:); scanf(%s,filename); /* 输入文件名输入文件名 */ i
27、f (fp=fopen(filename, r)=NULL) /* 打开打开 */ printf(“file open error.n”); /* 出错处理出错处理 */exit (0); while ( ( ch = fgetc(fp) )!=EOF) /* 读字符读字符 */ putchar(ch); fclose (fp); /* 关闭文件关闭文件 */34实用精品课件PPT例:使用标准输出文件显示文本文件内容例:使用标准输出文件显示文本文件内容#include int main ( ) FILE * fp; char filename20, ch; printf (Enter file
28、name:); scanf(%s,filename); /* 输入文件名输入文件名 */ if (fp=fopen(filename, r)=NULL) /* 打开打开 */ printf(“file open error.n”); /* 出错处理出错处理 */exit (0); while ( ( ch = fgetc(fp) )!=EOF) /* 读字符读字符 */ fputc(ch,stdout); /*向标准输出文件输出向标准输出文件输出(显示显示)*/ fclose (fp); /* 关闭文件关闭文件 */35实用精品课件PPT例:复制文本文件例:复制文本文件int main ( )
29、 FILE * fp1, * fp2; char file120, file220, ch; printf (Enter filename1:); scanf(%s,file1); printf (Enter filename2:); scanf(%s,file2); if ( (fp1=fopen(file1, “r”)=NULL ) /* 打开文件打开文件1 */ printf(file1 open error.n); exit (0); if ( (fp2=fopen(file2, “w”)=NULL ) /* 打开文件打开文件2 */ printf(file2 open error.n
30、); exit (0); while (ch=fgetc(fp1)!=EOF ) /*从文件从文件fp1中读字符中读字符*/ fputc (ch, fp2); /* 写入文件写入文件fp2中中 */ fclose (fp1); fclose (fp2);36实用精品课件PPTputchar (ch);fputc (ch, stdout);fputc (ch, fp2);37实用精品课件PPT11.3 文件顺序读写一一字符串输入输出字符串输入输出( fgets / fputs )输入函数:输入函数:fgets ( s, n, fp ); char s ; int n; FILE * fp;函数功
31、能:从函数功能:从 fp 所指向的文件中读取长度不所指向的文件中读取长度不超过超过 n-1 个字符的字符串,并将该字符串放个字符的字符串,并将该字符串放到字符数组到字符数组 s 中。函数的返回值为字符数组中。函数的返回值为字符数组 s 的首地址;如果文件结束或出错,则返回的首地址;如果文件结束或出错,则返回 NULL。38实用精品课件PPT11.3 文件顺序读写n情况情况1:已读入:已读入 n-1 个字符个字符则:则:s 中存入中存入 n-1 个字符,串尾为个字符,串尾为 0n情况情况2:读入字符遇到:读入字符遇到 n则:则:s 中存入实际读入的字符,串尾为中存入实际读入的字符,串尾为 n0n
32、情况情况3:读入字符遇到文件尾:读入字符遇到文件尾则:则:s 中存入实际读入的字符,中存入实际读入的字符,EOF 不存入不存入数组,串尾为数组,串尾为 0n情况情况4:当文件已经结束时,继续读文件:当文件已经结束时,继续读文件则函数返回则函数返回NULL,表示文件结束,表示文件结束39实用精品课件PPTabcdnf执行过程执行过程打开文本文件:打开文本文件:fp fgets ( s, 4, fp);abc0s文文件件的的读读写写位位置置指指针针abcdnf初始状态初始状态顺序读入顺序读入3个字符,存入数组,加上个字符,存入数组,加上0 fgets ( s, 4, fp);顺序读入顺序读入n ,
33、存入数组,退出,加上,存入数组,退出,加上0dn0s读入字符:读入字符:a 文件指针自动向后移动文件指针自动向后移动b 文件指针自动向后移动文件指针自动向后移动c 文件指针自动向后移动文件指针自动向后移动d 文件指针自动向后移动文件指针自动向后移动n 文件指针自动向后移动文件指针自动向后移动 fgets ( s, 4, fp);顺序读入遇到顺序读入遇到EOF,不存退出,加上,不存退出,加上0f0sf 文件指针自动向后移动文件指针自动向后移动 fgets ( s, 4, fp);读入读入EOF,不存,函数返回,不存,函数返回NULLEOF40实用精品课件PPTint main ( ) FILE
34、* fp; char file20, s4; printf (Enter filename:); scanf(%s,file); if ( (fp=fopen(file, r) = NULL ) printf(file open error.n); exit (0); while ( fgets( s,4,fp )!=NULL ) printf (%s, s); fclose (fp);abcdnfabcdnf输入文件:输入文件:输出:输出:fgets语句执行四次,语句执行四次,循环执行三次循环执行三次用长度为用长度为 4 的数组实现对文件内容的原样输出的数组实现对文件内容的原样输出无关紧要无
35、关紧要41实用精品课件PPT11.3 文件顺序读写输出函数:输出函数:fputs ( s, fp );char s ; FILE * fp;函数功能:函数功能: 将将s指向的字符串或字符串常量写入文件指向的字符串或字符串常量写入文件 fp。输出的字符串写入文件时,字符串结束标。输出的字符串写入文件时,字符串结束标记记“0”被自动舍去。被自动舍去。 函数调用成功,则返回值为函数调用成功,则返回值为 0;否则,返回;否则,返回文件结束标记文件结束标记 EOF。42实用精品课件PPTint main ( ) FILE * fp1, * fp2; char file120, file220, s10;
36、 printf (Enter filename1:); scanf(%s,file1); printf (Enter filename2:); scanf(%s,file2); if ( (fp1=fopen(file1,r) = NULL ) /*打开文件打开文件1*/ printf(file1 open error.n); exit (0); if ( (fp2=fopen(file2,w) = NULL ) /*打开文件打开文件2*/ printf(file2 open error.n); exit (0); while ( fgets(s,10,fp1) != NULL ) /*从从f
37、p1读出字符读出字符*/ fputs ( s, fp2 ); /* 将字符串写入文件将字符串写入文件fp2中中 */ fclose (fp1); fclose (fp2); 例:复制文本文件例:复制文本文件43实用精品课件PPT一一格式化输入输出格式化输入输出( fscanf / fprintf )输入函数:输入函数:fscanf (fp, 格式控制符格式控制符, 变量地址表变量地址表);功能:从功能:从ASCII文件文件fp中读取字符,按格式控制符中读取字符,按格式控制符的含义存入对应的变量中,返回值为输入的数据个的含义存入对应的变量中,返回值为输入的数据个数。数。fscanf与与scanf
38、类似,格式控制符相同。类似,格式控制符相同。输出函数:输出函数:fprintf( fp, 格式控制符格式控制符, 表达式列表表达式列表 );功能:将表达式列表中的数据按照格式控制符的说功能:将表达式列表中的数据按照格式控制符的说明,存入明,存入ASCII文件文件fp中,返回值为实际存入的数中,返回值为实际存入的数据个数。据个数。fprintf与与printf类似,格式控制符相同。类似,格式控制符相同。44实用精品课件PPTint main ( ) FILE * fp1; int a; char file20, s10; printf (Enter filename:); scanf(%s,fi
39、le); if ( (fp=fopen(file, r) = NULL ) printf(file open error.n); exit (0); fscanf (fp, %s%d, s, &a); fprintf (stdout, %s %dn, s, a); fclose (fp); printf(%s %dn,s,a);注意此间发生注意此间发生的二进制和的二进制和ASCII码的转换码的转换45实用精品课件PPT一一数据块输入输出数据块输入输出( fread / fwrite )输入函数:输入函数:fread (buffer, size, count, fp); char * buffe
40、r; unsigned size; int count; FILE * fp;函数功能:从二进制文件函数功能:从二进制文件fp中读取中读取count个数据个数据块存入块存入buffer中,每个数据块的大小为中,每个数据块的大小为size个字个字节。操作成功,函数的返回值为实际读入的数据节。操作成功,函数的返回值为实际读入的数据块的数量;若文件结束或出错,返回值为块的数量;若文件结束或出错,返回值为0。46实用精品课件PPT11.3 文件顺序读写输出函数:输出函数:fwrite(buffer, size, count, fp); char * buffer; unsigned size; int
41、 count; FILE * fp;函数功能:将函数功能:将buffer中的中的count个个数据块写入二进数据块写入二进制文件制文件fp中,每个数据块的大小为中,每个数据块的大小为size个字节。个字节。操作成功,函数的返回值为实际写入文件的数据操作成功,函数的返回值为实际写入文件的数据块的数量;若文件结束或出错,返回值为块的数量;若文件结束或出错,返回值为0。47实用精品课件PPT 从键盘输入从键盘输入3个学生的数据,将它们存入文件个学生的数据,将它们存入文件student;然后再从文件中读出数据,显示在屏幕上。然后再从文件中读出数据,显示在屏幕上。#define SIZE 3struct
42、 student /* 定义结构定义结构 */ long num; char name10; int age; char address10; stuSIZE, out;void fsave ( ) FILE * fp; int i; if (fp=fopen(“student”,“wb”)=NULL) /*二进制写二进制写*/ printf (Cannot open file.n); exit(1); for ( i=0; iSIZE; i+ ) /* 以数据块形式写入文件以数据块形式写入文件 */ if (fwrite(&stui,sizeof(struct student),1,fp)!
43、=1) printf(File write error.n); /* 出错处理出错处理 */ fclose (fp); /* 关闭文件关闭文件 */写入一个整型:写入一个整型:int a=15;fwrite(&a,sizeof(int),1,fp);48实用精品课件PPT主函数主函数int main ( ) FILE * fp; int i; for ( i=0; iSIZE; i+ ) /*从键盘读入学生的信息从键盘读入学生的信息*/ printf(Input student %d:, i+1); scanf (%ld%s%d%s, &stui.num, , &stui.a
44、ge, stui.address); fsave( ); /* 调用函数保存学生信息调用函数保存学生信息 */ fp = fopen (student, rb); /*二进制读方式二进制读方式 */ printf ( No. Name Age Addressn); while ( fread(&out, sizeof(out),1,fp) ) /*读数据块读数据块*/ printf (%8ld %-10s %4d %-10sn, out.num, , out.age, out.address); fclose(fp); /* 关闭文件关闭文件 */键盘结构数组文件键盘结构数组文
45、件文件结构变量显示器文件结构变量显示器49实用精品课件PPT第十一章 文件文件概述文件处理文件顺序读写文件随机操作文件检测文件实例50实用精品课件PPT11.4 文件随机操作一一文件读写操作的内部机制文件读写操作的内部机制q文件的读写是通过文件系统内部的文件的读写是通过文件系统内部的“位置指针位置指针(读读写位置指针写位置指针)”进行的。进行的。q当打开一个文件时,系统自动为这个打开的文件当打开一个文件时,系统自动为这个打开的文件建立一个位置指针,对该文件的读写操作均通过建立一个位置指针,对该文件的读写操作均通过位置指针进行操作。位置指针进行操作。qfopen后位置指针指向文件中第后位置指针指
46、向文件中第0个字节个字节(位置指位置指针指向已经读入的最后一个字节针指向已经读入的最后一个字节)。q文件结束时,位置指针指向文件最后文件结束时,位置指针指向文件最后1个字个字符符的的位置位置(调用调用feof函数为非函数为非0,表示文件已经结束,表示文件已经结束)。51实用精品课件PPT一一顺序读写操作顺序读写操作 在顺序读写文件时,文件的位置指针由系统自在顺序读写文件时,文件的位置指针由系统自动控制,每次读写操作,系统都会先将位置指针动控制,每次读写操作,系统都会先将位置指针移到文件的下一个字节,然后再进行读写操作。移到文件的下一个字节,然后再进行读写操作。 在不改变文件的读写位置指针的情况
47、下,只能在不改变文件的读写位置指针的情况下,只能对文件进行顺序操作。对文件进行顺序操作。一一随机读写操作随机读写操作 通过改变文件的位置指针,可在文件的任意位通过改变文件的位置指针,可在文件的任意位置进行读写操作。置进行读写操作。 与文件位置指针有关的函数:与文件位置指针有关的函数: fseek移动文件的位置指针移动文件的位置指针 rewind文件的位置指针回到文件头位置文件的位置指针回到文件头位置 ftell取文件的位置指针取文件的位置指针52实用精品课件PPT一一位置指针位置指针移动移动(fseek) fseek(fp, offset, position);FILE * fp; long
48、offset; int position;函数功能:函数功能: 将指定文件将指定文件 fp 的文件读写位置指针按照的文件读写位置指针按照position规定的方式移动规定的方式移动offset 个字节。移动成个字节。移动成功返回当前位置;否则,返回功返回当前位置;否则,返回-1。 position为起始点,指出以文件的什么位置为为起始点,指出以文件的什么位置为基准进行移动:基准进行移动: 0 文件的开头;文件的开头; 1 文件的当前位置;文件的当前位置; 2 文件的末尾。文件的末尾。53实用精品课件PPT11.4 文件随机操作 实例:实例:执行执行 fopen 成功后:成功后: 文件读写位置指
49、针为文件的第文件读写位置指针为文件的第 0 个字节个字节 fseek ( fp, 50, 0 ); 从文件头开始向前从文件头开始向前(文件尾方向文件尾方向)移动移动 50 个字节个字节 如果继续进行如果继续进行 fgetc,将读入第,将读入第 51 个字符个字符 fseek ( fp, -10, 1 ); 从当前位置向后从当前位置向后(文件头方向文件头方向)移动移动 10 个字节个字节 fseek ( fp, 0, 0 ); 文件指针回到文件头,文件指针值回到文件指针回到文件头,文件指针值回到 00 文件的开头;文件的开头;1 文件的当前位置;文件的当前位置;2 文件的末尾。文件的末尾。54实
50、用精品课件PPT11.4 文件随机操作 实例:实例: fseek ( fp, 0, 2 ) 将文件位置指针移动到文件最后一个字符的后将文件位置指针移动到文件最后一个字符的后面,可以简单认为是指向了文件结束标记面,可以简单认为是指向了文件结束标记EOF fseek ( fp, -1, 2 ) 文件指针指向最后一个字符文件指针指向最后一个字符 fseek ( fp, -2, 2 )文件倒数第文件倒数第2个字符个字符(文件最后一个字符之前文件最后一个字符之前) fseek ( fp, -20, 2 )从文件尾开始向后从文件尾开始向后(文件头方向文件头方向)移动移动 20 个字节个字节0 文件的开头;
51、文件的开头;1 文件的当前位置;文件的当前位置;2 文件的末尾。文件的末尾。55实用精品课件PPT11.4 文件随机操作一一位置指针返回到文件头位置指针返回到文件头(rewind)rewind ( fp );函数功能:函数功能: 使指定文件使指定文件 fp 的读写位置指针重新定位到的读写位置指针重新定位到文件的头位置。即:使文件位置指针回到文件的头位置。即:使文件位置指针回到0。 等价于:等价于: fseek ( fp, 0, 0 )56实用精品课件PPT11.4 文件随机操作一一取位置取位置指针指针(ftell)ftell ( fp );函数功能:函数功能: 取取 fp 所指向文件的当前读写
52、位置,即文件所指向文件的当前读写位置,即文件读写位置指针的当前值。读写位置指针的当前值。 该值是一个长整型数,是位置指针从文件开该值是一个长整型数,是位置指针从文件开始处到当前位置的位移量的始处到当前位置的位移量的字节数字节数。 如果函数的返回值为如果函数的返回值为 -1L,表示出错。,表示出错。57实用精品课件PPT第十一章 文件文件概述文件处理文件顺序读写文件随机操作文件检测文件实例58实用精品课件PPT11.5 文件检测一一检测文件操作后的状态检测文件操作后的状态 一般情况下应该检验的文件状态有:一般情况下应该检验的文件状态有:l文件是否结束?文件是否结束?l文件操作是否出错?文件操作是
53、否出错? C语言提供了两种手段来反映函数调用的情况和语言提供了两种手段来反映函数调用的情况和文件的状态:文件的状态:l使用函数的返回值可以知道各种文件调用使用函数的返回值可以知道各种文件调用(操作操作)是否成功;是否成功;l使用检测函数可以判断文件的操作状态和出错使用检测函数可以判断文件的操作状态和出错状态。状态。59实用精品课件PPTq检测文件结束函数检测文件结束函数feof ( fp )功能:若文件已经结束,返回值为非功能:若文件已经结束,返回值为非0;若文;若文件尚未结束,返回值为件尚未结束,返回值为0。q检测文件出错函数检测文件出错函数ferror ( fp )功能:若文件出错,返回值
54、为非功能:若文件出错,返回值为非0;若文件未;若文件未出错,返回值为出错,返回值为0。q清除出错标记及文件结束标记清除出错标记及文件结束标记clearerr ( fp )功能:清除文件功能:清除文件 fp 的出错和文件结束标记。的出错和文件结束标记。60实用精品课件PPT函数形式函数形式含义含义正常返回正常返回错误返回错误返回fp=fopen(f,m)以以m方式打开名方式打开名为为f的文件的文件指向指向f的文的文件指针件指针NULL(0)fclose(fp)关闭关闭fp所指文件所指文件0非非0ch=fgetc(fp)从从fp取下个字符取下个字符得到的字符得到的字符EOF(-1)fputc(ch
55、, fp)输出输出ch到到fp该字符该字符EOFfgets(s, n, fp)从从fp中读入不多中读入不多于于n个字符到串个字符到串ss首地址首地址NULLfputs(s, fp)将串将串s输出到输出到fp0EOFfscanf (fp, format, args)从从fp按格式读数按格式读数据到据到arg(地址地址)中中已输入的数已输入的数据个数据个数fprintf (fp, format, args)从从arg(地址地址)中按中按格式写数据到格式写数据到fp实际输出的实际输出的数据个数数据个数61实用精品课件PPT函数形式函数形式含义含义正常返回正常返回错误返回错误返回fread(pt,si
56、ze,n,fp)从从fp读长度读长度size的的n个数据项到个数据项到pt所所指内存区指内存区所读数据项所读数据项个数个数0fwrite(pt,size,n,fp)从从pt所指内存区写所指内存区写长度为长度为size的的n个个数据到数据到fp写到写到fp的数的数据项个数据项个数fseek(fp,n,p)以以p为基准移动为基准移动n个个字节字节当前位置当前位置-1rewind(fp)读写指针到文件头读写指针到文件头ftell(fp)返回读写位置返回读写位置读写位置读写位置-1Lfeof(fp)是否到文件尾是否到文件尾没到文件尾,没到文件尾,返回返回0到文件尾,到文件尾,非非0ferror(fp)fp是否有错是否有错无错,无错,0有错有错,非非062实用精品课件PPT第十一章 文件文件概述文件处理文件顺序读写文件随机操作文件检测文件实例63实用精品课
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车位销售赠品合同协议
- 辅导机构教师合同协议
- 配合过户补偿协议书范本
- 《课堂的智慧交锋》课件
- 五四青年团日活动策划方案
- 物业代缴协议书
- 软件无偿借用合同协议
- 道路黑化工程合同协议
- 农村生态环境保护与农业发展协同协议
- 车队用工协议书范本
- 破产法试题及答案
- 宪法卫士2023第八届全国学生学宪法讲宪法知识竞赛题库附答案(300题)
- 静脉输液不良反应及处理 课件
- 河南省开封市等2地2025届高三第三次质量检测英语+答案
- 北师大版2025三年级语文下学期期中课堂知识检测考试
- MOOC 颈肩腰腿痛中医防治-暨南大学 中国大学慕课答案
- 高效课堂新授课评价量化表
- 信和SDS2MS使用说明书
- 维修手册震旦218现场
- 画法几何与阴影透视复习题(DOC)
- 螺旋密封的设计及在流体机械中的应用
评论
0/150
提交评论