书签 分享 收藏 举报 版权申诉 / 35
上传文档赚钱

类型《C语言程序设计》课件第十章11.ppt

  • 上传人(卖家):momomo
  • 文档编号:4850741
  • 上传时间:2023-01-18
  • 格式:PPT
  • 页数:35
  • 大小:215.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《C语言程序设计》课件第十章11.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C语言程序设计 语言程序设计 课件 第十 11
    资源描述:

    1、10.1 10.1 语言文件概述语言文件概述10.2 10.2 文件的打开与关闭文件的打开与关闭10.3 10.3 文件的读写操作文件的读写操作10.4 10.4 位置指针与文件定位位置指针与文件定位10.5 10.5 出错检测出错检测在程序运行时,程序本身和数据一般都在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在存放在内存中。当程序运行结束后,存放在内存中的数据被释放。内存中的数据被释放。如果需要长期保存程序运行所需的原始如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。件形式存

    2、储到外部存储介质上。1 1文件与文件名文件与文件名 文件:是指存放在外部存储介质上的数据集合。文件:是指存放在外部存储介质上的数据集合。说明:每个文件都必须有一个文件名。说明:每个文件都必须有一个文件名。格式:主文件名格式:主文件名.扩展名扩展名 文件命名规则:遵循操作系统的约定。文件命名规则:遵循操作系统的约定。2 2文件分类文件分类(1 1)根据文件的内容分)根据文件的内容分 .程序文件程序文件 .源文件源文件 .目标文件目标文件 .可执行文件可执行文件 .数据文件数据文件(2 2)根据文件的组织形式分)根据文件的组织形式分 .顺序存取文件顺序存取文件 .随机存取文件。随机存取文件。(3

    3、3)根据文件的存储形式分)根据文件的存储形式分 .ASCII.ASCII码文件码文件 说明:说明:ASCIIASCII码文件的每码文件的每1 1个字节存储个字节存储1 1个字符,个字符,对字符进行逐个处理。占用存储空间较对字符进行逐个处理。占用存储空间较 多,而且要花费转换时间(二进制与多,而且要花费转换时间(二进制与 ASCIIASCII码之间的转换)。码之间的转换)。.二进制文件二进制文件 说明:二进制文件是把内存中的数据,原样输出说明:二进制文件是把内存中的数据,原样输出 到磁盘文件中。可以节省存储空间和转换到磁盘文件中。可以节省存储空间和转换 时间,但时间,但1 1个字节并不对应个字节

    4、并不对应1 1个字符,不能个字符,不能 直接输出字符形式。直接输出字符形式。3 3读文件与写文件读文件与写文件读文件:将磁盘文件中的数据传送到计算机内存读文件:将磁盘文件中的数据传送到计算机内存 的操作。的操作。写文件:从计算机内存向磁盘文件中传送数据的写文件:从计算机内存向磁盘文件中传送数据的 操作。操作。4 4构成文件的基本单元与流式文件构成文件的基本单元与流式文件在其它高级语言中,组成文件的基本单位是记录,在其它高级语言中,组成文件的基本单位是记录,对文件操作的基本单位也是记录。对文件操作的基本单位也是记录。语言将文件看作是由一个一个的字符(语言将文件看作是由一个一个的字符(ASCIIA

    5、SCII码码文件)或字节(二进制文件)组成的。将这种文件称文件)或字节(二进制文件)组成的。将这种文件称为流式文件。为流式文件。5 5文件类型文件类型FILEFILE系统给每个打开的文件都在内存中开辟一个区域,系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系这些信息保存在一个结构类型变量中,该结构类型由系统定义、取名为统定义、取名为FILEFILE。注意:结构类型名注意:结构类型名“FILE”FILE”必须大写。必须大写。6 6ANSI CANSI C的缓

    6、冲文件系统的缓冲文件系统缓冲文件系统:指系统自动地在内存区为每个正在缓冲文件系统:指系统自动地在内存区为每个正在 使用的文件开辟一个缓冲区。使用的文件开辟一个缓冲区。说明:说明:从内存向磁盘输出数据时,必须首先输出到缓冲从内存向磁盘输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。区中。待缓冲区装满后,再一起输出到磁盘文件中。从磁盘文件向内存读入数据时,首先将数据读入从磁盘文件向内存读入数据时,首先将数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。对文件进行操作之前,必须先打开该文件;使用对文件进行操作之前,

    7、必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。结束后,应立即关闭,以免数据丢失。语言规定了标准输入输出函数库,用语言规定了标准输入输出函数库,用fopen()fopen()函数打开一个文件,用函数打开一个文件,用fclose()fclose()函数关闭一个文件。函数关闭一个文件。10.2.1 10.2.1 文件的打开文件的打开fopen()fopen()函数函数格式:格式:FILE FILE *fopen(fopen(文件名文件名,操作方式操作方式););功能:返回一个指向指定文件的指针。功能:返回一个指向指定文件的指针。函数原型:函数原型:stdio.hstdio.h注:对文件操作

    8、的库函数,函数原型均在头文件注:对文件操作的库函数,函数原型均在头文件 stdio.hstdio.h中。后续函数不再赘述。中。后续函数不再赘述。说明:说明:(1 1)“文件名文件名”是指要打开(或创建)的文件名。若使用字符数是指要打开(或创建)的文件名。若使用字符数 组组(或字符指针或字符指针),则不使用双引号。,则不使用双引号。(2 2)“操作方式操作方式”如下表所示。如下表所示。文件使用方式文件使用方式 意意 义义 “rt”rt”只读打开一个文本文件,只允许读数据只读打开一个文本文件,只允许读数据 “wt”wt”只写打开或建立一个文本文件,只允许写数据只写打开或建立一个文本文件,只允许写数

    9、据 “at”at”追加打开一个文本文件,并在文件末尾写数据追加打开一个文本文件,并在文件末尾写数据 “rb”rb”只读打开一个二进制文件,只允许读数据只读打开一个二进制文件,只允许读数据 “wb”wb”只写打开或建立一个二进制文件,只允许写数据只写打开或建立一个二进制文件,只允许写数据 “ab”ab”追加打开一个二进制文件,并在文件末尾写数据追加打开一个二进制文件,并在文件末尾写数据 “rt+”rt+”读写打开一个文本文件,允许读和写读写打开一个文本文件,允许读和写 “wt+”wt+”读写打开或建立一个文本文件,允许读写读写打开或建立一个文本文件,允许读写 “at+”at+”读写打开一个文本文

    10、件,允许读,或在文件末追加数据读写打开一个文本文件,允许读,或在文件末追加数据 “rb+”rb+”读写打开一个二进制文件,允许读和写读写打开一个二进制文件,允许读和写 “wb+”wb+”读写打开或建立一个二进制文件,允许读和写读写打开或建立一个二进制文件,允许读和写 “ab+”ab+”读写打开一个二进制文件,允许读,或在文件末追加数据读写打开一个二进制文件,允许读,或在文件末追加数据例如:例如:FILE FILE *fp;fp;fp fpfopen(data.99fopen(data.99,r)r);(3 3)如果不能实现打开指定文件的操作,则)如果不能实现打开指定文件的操作,则fopen()

    11、fopen()函数返回一个空指针函数返回一个空指针NULL(NULL(其值在头文件其值在头文件stdio.hstdio.h 中被定义为中被定义为)。(4 4)“r r(b b)+”+”与与“a a(b b)+”+”的区别:使用前者打的区别:使用前者打 开文件时,读写位置指针指向文件头;使用后者开文件时,读写位置指针指向文件头;使用后者 时,读写指针指向文件尾。时,读写指针指向文件尾。(5 5)使用文本文件向计算机系统输入数据时,系统自)使用文本文件向计算机系统输入数据时,系统自 动将回车换行符转换成一个换行符;在输出时,动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符

    12、。使用二进将换行符转换成回车和换行两个字符。使用二进 制文件时,内存中的数据形式与数据文件中的形制文件时,内存中的数据形式与数据文件中的形 式完全一样,就不再进行转换。式完全一样,就不再进行转换。(6 6)有些编译系统,可能并不完全提供上述对文件的)有些编译系统,可能并不完全提供上述对文件的 操作方式,或采用的表示符号不同,请注意所使用操作方式,或采用的表示符号不同,请注意所使用 系统的规定。系统的规定。(7 7)在程序开始运行时,系统自动打开三个标准文件,)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:并分别定义了文件指针:.标准输入文件标准输入文件stdinstdin:

    13、指向终端输入指向终端输入(一般为键盘一般为键盘)。如果程序中指定要从。如果程序中指定要从 stdinstdin所指的文件输入数据,就是从终端键盘上输所指的文件输入数据,就是从终端键盘上输 入数据。入数据。.标准输出文件标准输出文件stdoutstdout:指向终端输出指向终端输出(一般为显示器一般为显示器)。.标准错误文件标准错误文件stderrstderr:指向终端标准错误输出(一般为显示器)。指向终端标准错误输出(一般为显示器)。为增强程序的可靠性,常用下面的方法打开一个为增强程序的可靠性,常用下面的方法打开一个文件:文件:if(fp=fopen(if(fp=fopen(文件名文件名,操作

    14、方式操作方式)=NULL)=NULL)printf(can not open this filen);printf(can not open this filen);exit(0);exit(0);exit()exit()函数函数格式:格式:void exit(void exit(程序状态值程序状态值););功能:关闭已打开的所有文件,结束程序运行,功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将返回操作系统,并将“程序状态值程序状态值”返回返回 给操作系统。给操作系统。说明:当说明:当“程序状态值程序状态值”为时,表示程序正常为时,表示程序正常 退出;非值时,表示程序出错退出。退

    15、出;非值时,表示程序出错退出。10.2.2 10.2.2 文件的关闭文件的关闭fcolse()fcolse()函数函数格式:格式:int fclose(FILE int fclose(FILE *文件指针文件指针););功能:关闭功能:关闭“文件指针文件指针”所指向的文件。所指向的文件。说明:如果正常關閉了文件如果正常关闭了说明:如果正常關閉了文件如果正常关闭了 文件,则函数返回值为;否则,返文件,则函数返回值为;否则,返 回值为非。回值为非。例如,例如,fclose(fp)fclose(fp);/*关闭关闭fpfp所指向的文件所指向的文件*/文件打开之后,就可以对它进行读与写的操作了。文件打

    16、开之后,就可以对它进行读与写的操作了。10.3.1 10.3.1 读写文件中的一个字符读写文件中的一个字符 10.3.2 10.3.2 读写一个字符串读写一个字符串 10.3.3 10.3.3 读写一个数据块读写一个数据块 10.3.4 10.3.4 对文件进行格式化读写对文件进行格式化读写 10.3.5 10.3.5 读写函数的选用原则读写函数的选用原则1 1将一个字符写到文件中将一个字符写到文件中fputc()fputc()函数函数例例:将键盘上输入的一个字符串(以将键盘上输入的一个字符串(以“”作为结束字作为结束字 符),以符),以ASCIIASCII码形式存储到一个磁盘文件中。码形式存

    17、储到一个磁盘文件中。#include“stdio.h”#include“stdio.h”void main(int argc,char void main(int argc,char*argv)argv)FILE FILE*fp;fp;char ch;char ch;if(argc!=2)/if(argc!=2)/*参数个数不对参数个数不对*/printf(the number of arguments not correctnn);printf(the number of arguments not correctnn);exit(0);exit(0);if(fp=fopen(argv1,w

    18、)=NULL)/if(fp=fopen(argv1,w)=NULL)/*打开文件失败打开文件失败*/printf(can not open this filen);printf(can not open this filen);exit(0);exit(0);/*输入字符,并存储到指定文件中输入字符,并存储到指定文件中*/for(;(ch=getchar()!=;)for(;(ch=getchar()!=;)fputc(ch,fp);fputc(ch,fp);/*输入字符并存储到文件中输入字符并存储到文件中*/fclose(fp);fclose(fp);/*关闭文件关闭文件*/程序运行情况:程

    19、序运行情况:abcdefg1234567abcdefg1234567库函数库函数fputc()fputc():格式:格式:int fputc(int fputc(字符数据字符数据,文件指针文件指针););功能:将字符数据输出到功能:将字符数据输出到“文件指针文件指针”所指向的文件所指向的文件 中去,同时将读写位置指针向前移动中去,同时将读写位置指针向前移动1 1个字节个字节 (即指向下一个写入位置)。(即指向下一个写入位置)。说明:说明:其中其中“字符数据字符数据”,既可以是字符常量,也可以,既可以是字符常量,也可以 是字符变量。是字符变量。如果输出成功,则函数返回值就是输出的字符如果输出成功

    20、,则函数返回值就是输出的字符 数据;否则,返回一个符号常量数据;否则,返回一个符号常量EOF(EOF(其值在头其值在头 文件文件stdio.hstdio.h中,被定义为中,被定义为-1)-1)。2 2从文件中读入一个字符从文件中读入一个字符fgetc()fgetc()函数和函数和feof()feof()函数函数 案例案例12.2 12.2 顺序显示顺序显示 案例案例12.112.1创建的磁盘创建的磁盘ASCIIASCII码文件。码文件。/*案例代码文件名:案例代码文件名:AL12_2.CAL12_2.C*/*程序功能:顺序显示一个磁盘程序功能:顺序显示一个磁盘ASCIIASCII码文件码文件*

    21、/*参数:带参主函数,使用格式:可执行文件名参数:带参主函数,使用格式:可执行文件名 源文件名源文件名*/#include stdio.h#include stdio.hvoid main(int argc,char void main(int argc,char*argv)argv)FILE FILE*fp;fp;char ch;char ch;if(argc!=2)if(argc!=2)/*参数个数不对参数个数不对*/printf(the number of arguments not correctn);printf(the number of arguments not correct

    22、n);printf(“n Usage:printf(“n Usage:可执行文件名可执行文件名 源文件名源文件名););exit(0);exit(0);if(fp=fopen(argv1,r)=NULL)if(fp=fopen(argv1,r)=NULL)printf(can not open source filen);printf(can not open source filen);exit(0);exit(0);/*顺序输出文件的内容顺序输出文件的内容*/for(;(ch=fgetc(fp)!=EOF;)for(;(ch=fgetc(fp)!=EOF;)putchar(ch);putc

    23、har(ch);/*顺序读入并显示顺序读入并显示*/fclose(fp);fclose(fp);/*关闭打开的文件关闭打开的文件*/程序运行情况:程序运行情况:abcdefg1234567abcdefg1234567(1 1)库函数)库函数fgetc()fgetc()1 1)用法:)用法:int fgetc(int fgetc(文件指针文件指针););2 2)功能:从)功能:从“文件指针文件指针”所指向的文件中,读入一个所指向的文件中,读入一个 字符,同时将读写位置指针向前移动字符,同时将读写位置指针向前移动1 1个字个字 节(即指向下一个字符)。该函数无出错返节(即指向下一个字符)。该函数无

    24、出错返 回值。回值。例如,例如,fgetc(fp)fgetc(fp)表达式,从文件表达式,从文件fpfp中读一个字符,同中读一个字符,同 时将时将fpfp的读写位置指针向前移动到下一个字符。的读写位置指针向前移动到下一个字符。(2 2)关于符号常量)关于符号常量EOFEOF 在对在对ASCIIASCII码文件执行读入操作时,如果遇到文件码文件执行读入操作时,如果遇到文件尾尾,则读操作函数返回一个文件结束标志则读操作函数返回一个文件结束标志EOFEOF(其值在头文(其值在头文件件stdio.hstdio.h中被定义为中被定义为-1-1)。)。在对二进制文件执行读入操作时,必须使用库函数在对二进制

    25、文件执行读入操作时,必须使用库函数feof()feof()来判断是否遇到文件尾。来判断是否遇到文件尾。案例案例12.3 12.3 实现制作实现制作ASCIIASCII码文件副本的功能。码文件副本的功能。/*案例代码文件名:案例代码文件名:AL12_2.CAL12_2.C*/*程序功能:制作程序功能:制作ASCIIASCII码文件的副本码文件的副本*/*使用格式:可执行文件名使用格式:可执行文件名 源文件名源文件名 目标文件名目标文件名*/#include stdio.h#include stdio.hvoid main(int argc,char void main(int argc,char

    26、*argv)argv)FILE FILE*input,input,*output;output;/*input input:源文件指针:源文件指针,output,output:目标文件指针:目标文件指针 */char ch;char ch;if(argc!=3)/if(argc!=3)/*参数个数不对参数个数不对*/printf(the number of arguments not correctn);printf(the number of arguments not correctn);printf(nUsage:printf(nUsage:可执行文件名可执行文件名source-file

    27、 dest-file);source-file dest-file);exit(0);exit(0);if(fp=fopen(argv1,r)=NULL)/if(fp=fopen(argv1,r)=NULL)/*打开源文件失败打开源文件失败*/printf(can not open source filen);printf(can not open source filen);exit(0);exit(0);if(fp=fopen(argv2,w)=NULL)/if(fp=fopen(argv2,w)=NULL)/*创建目标文件失败创建目标文件失败*/printf(can not create

    28、 destination filen);printf(can not create destination filen);exit(0);exit(0);/*复制源文件到目标文件中复制源文件到目标文件中*/for(;(!feof(input);)fputc(fgetc(input),output);for(;(!feof(input);)fputc(fgetc(input),output);fclose(input);fclose(output);/fclose(input);fclose(output);/*关闭源文件和目标文件关闭源文件和目标文件*/库函数库函数feof()feof():1

    29、 1)用法:)用法:int feof(int feof(文件指针文件指针););2 2)功能:在执行读文件操作时,如果遇到文件尾,则函数返)功能:在执行读文件操作时,如果遇到文件尾,则函数返 回逻辑真(回逻辑真(1 1);否则,则返回逻辑假();否则,则返回逻辑假(0 0)。)。feof()feof()函数同时适用于函数同时适用于ASCIIASCII码文件和二进制文件。码文件和二进制文件。例如,例如,!feof(input)!feof(input)表示源文件(用于输入)未结束,循环表示源文件(用于输入)未结束,循环继续。继续。案例案例12.4 12.4 将键盘上输入的一个长度不超过将键盘上输入

    30、的一个长度不超过8080的字符的字符 串,以串,以ASCIIASCII码形式存储到一个磁盘文件码形式存储到一个磁盘文件 中;然后再输出到屏幕上。中;然后再输出到屏幕上。/*案例代码文件名:案例代码文件名:AL12_4.CAL12_4.C*/*参数:可执行文件名参数:可执行文件名 要创建的磁盘文件名要创建的磁盘文件名*/#include stdio.h#include stdio.hvoid main(int argc,char void main(int argc,char*argv)argv)FILE FILE*fp;fp;char string81;/char string81;/*字符数

    31、组用于暂存输入输出的字符串字符数组用于暂存输入输出的字符串*/if(argc2)/if(argc2)/*参数太多,提示参数太多,提示 出错出错*/printf(Too many parametersnn);printf(Too many parametersnn);printf(Usage:printf(Usage:可执行文件名可执行文件名 filenamen);filenamen);exit(0);exit(0);if(argc=1)if(argc=1)/*缺磁盘文件名,提示输入缺磁盘文件名,提示输入*/printf(Input the filename:);printf(Input the

    32、 filename:);gets(string);gets(string);/*借用借用stringstring暂存输入的文件名暂存输入的文件名*/argv1=(char argv1=(char*)malloc(strlen(string)+1);)malloc(strlen(string)+1);/*给文件名参数申请内存空间给文件名参数申请内存空间*/strcpy(argv1,string);/strcpy(argv1,string);/*复制文件名到形参中复制文件名到形参中*/if(fp=fopen(argv1,w)=NULL)if(fp=fopen(argv1,w)=NULL)/*打开文

    33、件失败打开文件失败*/printf(can not open this filen);printf(can not open this filen);exit(0);exit(0);/*从键盘上输入字符串,并存储到指定文件中从键盘上输入字符串,并存储到指定文件中*/printf(Input a string:);printf(Input a string:);gets(string);/gets(string);/*从键盘上输入字符串从键盘上输入字符串*/fputs(string,fp);fputs(string,fp);/*存储到指定文件存储到指定文件*/fclose(fp);fclose(

    34、fp);/*重新打开文件,读出其中的字符串,并输出到屏幕上重新打开文件,读出其中的字符串,并输出到屏幕上*/if(fp=fopen(argv1,r)=NULL)/if(fp=fopen(argv1,r)=NULL)/*打开文件失败打开文件失败*/printf(can not open this filen);printf(can not open this filen);exit(0);exit(0);fgets(string,strlen(string)+1,fp);fgets(string,strlen(string)+1,fp);/*从文件中读一个字符串从文件中读一个字符串*/print

    35、f(Output the string:);printf(Output the string:);puts(string);puts(string);/*将字符串输出到屏幕上将字符串输出到屏幕上*/fclose(fp);fclose(fp);(1 1)为增强程序的可靠性,程序中对参数过多的情况,提示出)为增强程序的可靠性,程序中对参数过多的情况,提示出 错、并终止程序运行;而遗漏文件名时,提示用户输入。错、并终止程序运行;而遗漏文件名时,提示用户输入。同时,为增强程序的人机交互性,凡是需要用户输入数据的地同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数

    36、据的地方,都设置输出说方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息。明信息。(2 2)库函数)库函数fputs()fputs()向指定文件输出一个字符串向指定文件输出一个字符串1 1)用法:)用法:int fputs(int fputs(字符串字符串,文件指针文件指针););其中其中“字符串字符串”可以是一个字符串常量,或字符数组名,或字可以是一个字符串常量,或字符数组名,或字符指针变量名。符指针变量名。2 2)功能:向指定文件输出一个字符串,同时将读写位置指针向)功能:向指定文件输出一个字符串,同时将读写位置指针向 前移动前移动strlength(strlength(字符

    37、串长度字符串长度)个字节。如果输出成个字节。如果输出成 功,则函数返回值为;否则,为非值。功,则函数返回值为;否则,为非值。(3 3)库函数库函数fgets()fgets()从文件中读一个字符串从文件中读一个字符串 1 1)用法:)用法:char char*fgets(fgets(指针指针,串长度串长度+1,+1,文件指针文件指针););2 2)功能:从指定文件中读入一个字符串,存入)功能:从指定文件中读入一个字符串,存入“字符数组字符数组 指针指针”中,并在尾端自动加一个结束标志中,并在尾端自动加一个结束标志00;同时,将读写位置指针向前移动同时,将读写位置指针向前移动strlength(s

    38、trlength(字符串字符串 长度长度)个字节。个字节。如果在读入规定长度之前遇到文件尾如果在读入规定长度之前遇到文件尾EOFEOF或换行符,读入即结或换行符,读入即结束。束。实际应用中,常常要求实际应用中,常常要求1 1次读写次读写1 1个数据块。为此,个数据块。为此,ANSI C ANSI C 标准设置了标准设置了fread()fread()和和fwrite()fwrite()函数。函数。1 1用法:用法:int fread(void int fread(void*buffer,int size,int count,FILE buffer,int size,int count,FILE*

    39、fp)fp);int fwrite(void int fwrite(void*buffer,int size,int count,FILE buffer,int size,int count,FILE*fp)fp);2 2功能:功能:fread()fread()从从fpfp所指向文件的当前位置开始,一所指向文件的当前位置开始,一次读入次读入sizesize个字节,重复个字节,重复countcount次,并将读入的数据存次,并将读入的数据存放到从放到从bufferbuffer开始的内存中;同时,将读写位置指针开始的内存中;同时,将读写位置指针向前移动向前移动sizesize*count coun

    40、t个字节。个字节。其中,其中,bufferbuffer是存放读入数据的起始地址(即存放是存放读入数据的起始地址(即存放何处)。何处)。fwrite()从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size*count个字节。其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。如果调用fread()或fwrite()成功,则函数返回值等于count。fread()和fwrite()函数,一般用于二进制文件的处理。与scanf()和printf()函数的功能相似,区别在于:fscanf()和fpr

    41、intf()函数的操作对象是指定文件,而scanf()和printf()函数的操作对象是标准输入(stdin)输出(stdout)文件。int fscanf(文件指针,格式符“,输入变量首地址表);int fprintf(文件指针,格式符“,输出参量表);例如,.int i=3;float f=9.80;.fprintf(fp,%2d,%6.2f,i,f);.fprintf()函数的作用是,将变量i按%2d格式、变量f按%6.2f格式,以逗号作分隔符,输出到fp所指向的文件中:3,9.80(表示1个空格)。从功能角度来说,从功能角度来说,fread()fread()和和fwrite()fwri

    42、te()函数可以完成函数可以完成文件的任何数据读写操作。文件的任何数据读写操作。但为方便起见,依下列原但为方便起见,依下列原则选用:则选用:1 1读读/写写1 1个字符(或字节)数据时:选用个字符(或字节)数据时:选用fgetc()fgetc()和和fputc()fputc()函数。函数。2 2读读/写写1 1个字符串时:选用个字符串时:选用fgets()fgets()和和fputs()fputs()函数。函数。3 3读读/写写1 1个(或多个)不含格式的数据时:选用个(或多个)不含格式的数据时:选用fread()fread()和和fwrite()fwrite()函数。函数。4 4读读/写写1

    43、 1个(或多个)含格式的数据时:选用个(或多个)含格式的数据时:选用fscanf()fscanf()和和fprintf()fprintf()函数。函数。文件中有一个读写位置指针,指向当前的读写位置。每次读写文件中有一个读写位置指针,指向当前的读写位置。每次读写1 1个(或个(或1 1组)数据后,系统自动将位置指针移动到下一个读写位置组)数据后,系统自动将位置指针移动到下一个读写位置上。如果想改变系统这种读写规律,可使用有关文件定位的函数。上。如果想改变系统这种读写规律,可使用有关文件定位的函数。10.4.1 10.4.1 位置指针复位函数位置指针复位函数rewind()rewind()1 1用

    44、法:用法:int rewind(int rewind(文件指针文件指针););2 2功能:使文件的位置指针返回到文件头。功能:使文件的位置指针返回到文件头。10.4.2 10.4.2 随机读写与随机读写与fseek()fseek()函数函数 对于流式文件,既可以顺序读写,也可随机读写,关键在于控对于流式文件,既可以顺序读写,也可随机读写,关键在于控制文件的位置指针。制文件的位置指针。所谓顺序读写是指,读写完当前数据后,系统自动将文件的位所谓顺序读写是指,读写完当前数据后,系统自动将文件的位置指针移动到下一个读写位置上。置指针移动到下一个读写位置上。所谓随机读写是指,读写完当前数据后,可通过调用

    45、所谓随机读写是指,读写完当前数据后,可通过调用fseek()fseek()函数,将位置指针移动到文件中任何一个地方。函数,将位置指针移动到文件中任何一个地方。1 1用法:用法:int fseek(int fseek(文件指针,位移量,参照点文件指针,位移量,参照点););2 2功能:将指定文件的位置指针,从参照点开始,移动指功能:将指定文件的位置指针,从参照点开始,移动指定的字节数。定的字节数。(1 1)参照点:用)参照点:用0 0(文件头)、(文件头)、1 1(当前位置)和(文件尾)(当前位置)和(文件尾)表示。表示。在在ANSI CANSI C标准中,还规定了下面的名字:标准中,还规定了下

    46、面的名字:SEEK_SETSEEK_SET文件头,文件头,SEEK_CURSEEK_CUR当前位置,当前位置,SEEK_ENDSEEK_END文件尾文件尾(2 2)位移量:以参照点为起点,向前(当位移量)位移量:以参照点为起点,向前(当位移量 时)或时)或后(当位移量后(当位移量 时)移动的字节数。在时)移动的字节数。在ANSI CANSI C标准中,要求位标准中,要求位移量为移量为long intlong int型数据。型数据。fseek()fseek()函数一般用于二进制文件。函数一般用于二进制文件。10.4.3 返回文件当前位置的函数返回文件当前位置的函数ftell()由于文件的位置指针

    47、可以任意移动,也经常移动,往往容易迷失当前位置,ftell()就可以解决这个问题。1用法:long ftell(文件指针文件指针);2功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。如果返回值为-1L,则表明调用出错。例如:offset=ftell(fp);if(offset=-1L)printf(“ftell()errorn”);10.5.1 ferror()函数函数 在调用输入输出库函数时,如果出错,除了函数返回值有所反映外,也可利用ferror()函数来检测。1用法:int ferror(文件指针文件指针);2功能:如果函数返回值为0,表示未出错;如果返回一个非0值,表示出错。(1)对同一文件,每次调用输入输出函数均产生一个新的ferror()函数值。因此在调用了输入输出函数后,应立即检测,否则出错信息会丢失。(2)在执行fopen()函数时,系统将ferror()的值自动置为0。10.5.2 clearerr()函数函数1用法:void clearerr(文件指针文件指针);2功能:将文件错误标志(即ferror()函数的值)和文件结束标志(即feof()函数的值)置为0。对同一文件,只要出错就一直保留,直至遇到clearerr()函数或rewind()函数,或其它任何一个输入输出库函数。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《C语言程序设计》课件第十章11.ppt
    链接地址:https://www.163wenku.com/p-4850741.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库