文件操作系统管理数据的基本单位存储在外存储器上的数据的[精品ppt课件]优秀PPT.pptx

上传人:1398****507 文档编号:56533214 上传时间:2022-11-02 格式:PPTX 页数:60 大小:205.98KB
返回 下载 相关 举报
文件操作系统管理数据的基本单位存储在外存储器上的数据的[精品ppt课件]优秀PPT.pptx_第1页
第1页 / 共60页
文件操作系统管理数据的基本单位存储在外存储器上的数据的[精品ppt课件]优秀PPT.pptx_第2页
第2页 / 共60页
点击查看更多>>
资源描述

《文件操作系统管理数据的基本单位存储在外存储器上的数据的[精品ppt课件]优秀PPT.pptx》由会员分享,可在线阅读,更多相关《文件操作系统管理数据的基本单位存储在外存储器上的数据的[精品ppt课件]优秀PPT.pptx(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 第9章 文件操作 1本章要求:本章要求:驾驭驾驭C语言中文件的概念语言中文件的概念驾驭打开文件的不同模式驾驭打开文件的不同模式驾驭运用各种操作函数对文件进行读写的方法驾驭运用各种操作函数对文件进行读写的方法能编写与文件有关的程序能编写与文件有关的程序本章难点:本章难点:驾驭文件的各种操作函数,能对文件进行读写数驾驭文件的各种操作函数,能对文件进行读写数据操作。据操作。本章重点:本章重点:驾驭文件的各种操作函数,能对文件进行读写驾驭文件的各种操作函数,能对文件进行读写数据操作。数据操作。第第9章章文件操作文件操作 第9章 文件操作 29.1.1文本文件与二进制文件文本文件与二进制文件nC语语言

2、言把把文文件件看看作作一一个个字字节节序序列列,即即由由一一连连串串的的字字节节组组成成,称称为为“流流”,每每一一个个字字节节都都可可以以单单独独读读取取,每每一一个个文文件件或或者者以以文文件件结结束束标标记记结结束束,或或者者在在特特定定的的字字节节号处结束。号处结束。n按数据的组织形式分类按数据的组织形式分类n1、文本文件、文本文件n又又称称ASCII文文件件,每每个个字字节节对对应应一一个个字字符符,用用于于存存放放该字符的该字符的ASCII码,输入输出时对字符逐个处理。码,输入输出时对字符逐个处理。n文文本本文文件件由由文文本本行行组组成成,每每行行中中可可以以有有0个个或或多多个

3、个字字符符,并并以以行行终终止止符符n结结尾尾,文文件件结结尾尾是是文文件件结结束束标标记,该标记后再没有字符出现了。记,该标记后再没有字符出现了。n2、二进制文件、二进制文件n数据按其在内存中的存储形式原样存放数据按其在内存中的存储形式原样存放 第9章 文件操作 30010011100010000内存存储形式内存存储形式0010011100010000二进制形式二进制形式0011000100110000001100000011000000110000ASCII形式形式文本文件特点文本文件特点:速度慢、便于对字符操作速度慢、便于对字符操作二进制文件特点二进制文件特点:速速度度快快、便便于于存存

4、放放中间结果中间结果【例例】整整数数10000 第9章 文件操作 49.1.2缓冲文件系统缓冲文件系统缓缓冲冲文文件件系系统统:系系统统自自动动地地为为每每一一个个正正在在运运用用的的文文件在内存中开拓一个缓冲区。件在内存中开拓一个缓冲区。对对输输入入输输出出进进行行缓缓冲冲,可可以以大大块块地地转转移移信信息息,而而不不再是一个个字节进行操作。再是一个个字节进行操作。内内存存缓缓冲冲区区的的大大小小,影影响响着着操操作作外外存存的的次次数数。内内存存缓缓冲冲区区越越大大,则则操操作作外外存存的的次次数数就就少少,执执行行速速度度就就快快、效率高。效率高。文件文件程序程序数据区数据区输输出出文

5、件缓冲区文件缓冲区输输入入文件缓冲区文件缓冲区 第9章 文件操作 59.1.3文件类型指针文件类型指针C语言的缓冲文件系统中,用语言的缓冲文件系统中,用文件类型指针文件类型指针来表示文件。来表示文件。定义文件类型指针的一般形式:定义文件类型指针的一般形式:FILE*指针变量名;指针变量名;C编编译译系系统统定定义义的的一一种种结结构构体体类类型型,其其中中的的成成员员用用于于存存放放有有关关文文件件的的一一些些信信息息(文文件件名名、文文件件状状态态和和文文件件当前读写位置当前读写位置等)等)指指针针变变量量用用于于指指向向一一个个文文件件,事事实实上上是是用用于于存存放放文文件件缓缓冲冲区区

6、的首地址。的首地址。FILE结结构构体体是是在在头头文文件件中中定定义义的的,对对文文件件操操作作的的程程序,在最前面都应写上文件包含吩咐:序,在最前面都应写上文件包含吩咐:#includeC语言通过文件指针变量对文件进行打开、读、写及关闭操作。语言通过文件指针变量对文件进行打开、读、写及关闭操作。第9章 文件操作 6FILE结构体类型在头文件结构体类型在头文件stdio.h中定义如下:中定义如下:typedefstructshortlevel;/*文件缓冲区占用程度文件缓冲区占用程度*/unsignedflags;/*文件状态标记文件状态标记*/charfd;/*文件描述符文件描述符*/un

7、signedcharhold;/*若无缓冲区不读取字符若无缓冲区不读取字符*/shortbsize;/*文件缓冲区大小文件缓冲区大小*/unsignedchar*buffer;/*数据缓冲区的位置数据缓冲区的位置*/unsignedchar*curp;/*指针当前的位置指针当前的位置*/unsignedistemp;/*临时文件指示器临时文件指示器*/shorttoken;/*用于操作有效性检查用于操作有效性检查*/FILE;/*文件类型符文件类型符*/9.1.3文件类型指针文件类型指针在编程时不必关切在编程时不必关切FILE结构的具体细微环节,只需在运用结构的具体细微环节,只需在运用I/O函

8、数时用这个文件指针变量来指定所操作的文件。函数时用这个文件指针变量来指定所操作的文件。第9章 文件操作 79.1.3文件类型指针文件类型指针在在C语言程序中运用文件,须要完成以下工作:语言程序中运用文件,须要完成以下工作:1)声明一个)声明一个FILE类型的文件指针变量;类型的文件指针变量;2)打开文件:)打开文件:调调用用fopen函函数数将将此此文文件件指指针针变变量量和和某某一一个个实实际际的的磁磁盘盘文文件件相相联联系系。要要求求指指定定文文件件名名,并并且且说说明明对对该该文文件件是是输输入操作还是输出操作。入操作还是输出操作。3)读写文件:)读写文件:调用适当的文件操作函数完成必要

9、的调用适当的文件操作函数完成必要的I/O操作。操作。对输入文件来说,函数从文件中将数据读取至程序中;对输入文件来说,函数从文件中将数据读取至程序中;对输出文件来说,函数将程序中的数据转移到文件中去。对输出文件来说,函数将程序中的数据转移到文件中去。4)关闭文件:)关闭文件:调调用用fclose函函数数表表明明文文件件操操作作结结束束,断断开开文文件件指指针针与与实实际文件之间的联系。际文件之间的联系。第9章 文件操作 89.2文件的打开与关闭文件的打开与关闭9.2.1文件的打开文件的打开 打打开开文文件件,事事实实上上是是建建立立文文件件的的各各种种有有关关信信息息,并并使使文文件件指指针指向

10、该文件;针指向该文件;缓缓冲冲文文件件系系统统借借助助文文件件指指针针来来对对文文件件进进行行管管理理和和访访问问,既既可可以以读读写写字字符符、字字符符串串、格格式式化化数数据据,也也可可以以读写二进制数据。读写二进制数据。“文件名文件名”和和“文件打开模式文件打开模式”都都是是字符串常量或字符数组字符串常量或字符数组。文件指针名文件指针名=fopen(文件名文件名,文件打开模式文件打开模式)须须要要打打开开的的文件的名字文件的名字确定文件的确定文件的数据操作方式数据操作方式打开文件运用函数打开文件运用函数fopen其调用的一般形式为:其调用的一般形式为:第9章 文件操作 9举举例例FILE

11、*fp;fp=fopen(source.txt,r);作用:作用:以读的方式(以读的方式(“r”“r”模式即表示读模式即表示读“read”“read”)打开当)打开当前书目下文件名为前书目下文件名为source.txtsource.txt的文件。的文件。假如打开文件成功,则返回一个指向假如打开文件成功,则返回一个指向source.txtsource.txt文件文件信息区的起始地址的指针,并赋值给信息区的起始地址的指针,并赋值给fpfp,即,即fpfp指向了文指向了文件件source.txtsource.txt。其后全部对该文件的操作都必需通过。其后全部对该文件的操作都必需通过fpfp指针来实现

12、。指针来实现。假如文件打开失败,则返回一个空指针假如文件打开失败,则返回一个空指针NULLNULL,赋值给,赋值给fpfp。说明:说明:文件名可以包含路径和文件名两部分。文件名可以包含路径和文件名两部分。写路径时,因为转义字符以反斜杠开头,所以写路径时,因为转义字符以反斜杠开头,所以“”“”才是表示一个反斜杠。才是表示一个反斜杠。【例】若路径和文件名为:【例】若路径和文件名为:“c:tcsource.txt”“c:tcsource.txt”,则应写成则应写成“c:tcsource.txt”“c:tcsource.txt”。第9章 文件操作 109.2.1文件的打开文件的打开文件的打开模式文件的

13、打开模式模式字符串模式字符串意意 义义r以以只读方式只读方式打开一个打开一个文本文件文本文件,只允许读数据,只允许读数据w以以只写只写方式打开或建立一个方式打开或建立一个文本文件文本文件,只允许写数据,只允许写数据a以以追加追加方式打开一个方式打开一个文本文本文件,并在文件文件,并在文件末尾末尾写数据写数据r+以以读写读写方式打开一个方式打开一个文本文本文件,允许读和写文件,允许读和写w+以以读写读写方式打开或建立一个方式打开或建立一个文本文本文件,允许读写文件,允许读写a+以以读写读写方式打开一个方式打开一个文本文本文件,允许读,或在文件末追加数文件,允许读,或在文件末追加数rb以以只读只读

14、方式打开一个方式打开一个二进制文件二进制文件,只允许读数据,只允许读数据wb以只写方式打开或建立一个二进制文件,只允许写数据以只写方式打开或建立一个二进制文件,只允许写数据ab以追加方式打开一个二进制文件,并在文件末尾写数据以追加方式打开一个二进制文件,并在文件末尾写数据rb+以读写方式打开一个二进制文件,允许读和写以读写方式打开一个二进制文件,允许读和写wb+以读写方式打开或建立一个二进制文件,允许读和写以读写方式打开或建立一个二进制文件,允许读和写ab+以读写方式打开一个二进制文件,允许读,或在文件末追加数据以读写方式打开一个二进制文件,允许读,或在文件末追加数据 第9章 文件操作 119

15、.2.1文件的打开文件的打开-模式说明模式说明 1 1)“r”“r”模式:模式:只能用于输入(读操作),且只能打开一个已经存在的文件。只能用于输入(读操作),且只能打开一个已经存在的文件。2 2)“w”“w”模式:模式:只能用于输出(写操作)。只能用于输出(写操作)。假如指定的文件不存在,则新建一个文件;假如指定的文件不存在,则新建一个文件;假如文件存在,则把原来的文件删除,再重新建立一个空白的假如文件存在,则把原来的文件删除,再重新建立一个空白的文件。文件。3 3)“a”“a”模式:模式:用于追加操作。用于追加操作。假如指定的文件不存在,则新建该文件;假如指定的文件不存在,则新建该文件;假如

16、文件存在,保留该文件原有的数据,在原文件的末尾添加假如文件存在,保留该文件原有的数据,在原文件的末尾添加新的数据。新的数据。4 4)打开方式带上)打开方式带上“b”“b”表示是对二进制文件进行操作。带上表示是对二进制文件进行操作。带上“+”“+”表示既可以读,又可以写。而对待文件存在与否的不同处表示既可以读,又可以写。而对待文件存在与否的不同处理则依据理则依据“r”“r”、“w”“w”、“a”“a”各自的规定。各自的规定。5 5)假如在打开文件时发生错误,即打开失败,)假如在打开文件时发生错误,即打开失败,fopenfopen返回一个返回一个空指针空指针NULLNULL。第9章 文件操作 12

17、文件打开可能出现的错误有:文件打开可能出现的错误有:试图以试图以“读读”模式(带模式(带“r”的方式)打开一个并不存在的文的方式)打开一个并不存在的文件;件;试图以试图以“写写”方式(带方式(带“w”或或“a”的方式、的方式、“r+”或或“rb+”方式)打开被设置为方式)打开被设置为“只读只读”属性的文件。属性的文件。新建一个文件,而磁盘上没有足够的剩余空间或磁盘被写爱护。新建一个文件,而磁盘上没有足够的剩余空间或磁盘被写爱护。用不正确的模式打开一个文件可能会破坏文件的内容。用不正确的模式打开一个文件可能会破坏文件的内容。为避开因上述缘由的出错,常用以下的方法来打开一个文件:为避开因上述缘由的

18、出错,常用以下的方法来打开一个文件:9.2.1文件的打开文件的打开-模式说明模式说明if(fp=fopen(source.txt,r)=NULL)printf(Thisfilecouldnotbeopened!n);exit(0)/*返回操作系统返回操作系统*/else /*此处编写对文件读此处编写对文件读/写的代码写的代码*/#include 第9章 文件操作 139.2文件的打开与关闭文件的打开与关闭9.2.2文件的关闭文件的关闭【例】【例】fclose(fp)关闭由指针关闭由指针fp指定的文件,同时依据须要刷新缓冲区。指定的文件,同时依据须要刷新缓冲区。假如文件成功关闭,假如文件成功关闭

19、,fclose函数将返回值函数将返回值0,否则返回,否则返回EOF。fclose(文件指针变量文件指针变量);对文件的操作完成后,应确保关闭程序中打开的文件,以避对文件的操作完成后,应确保关闭程序中打开的文件,以避开文件的数据丢失。开文件的数据丢失。关闭文件指断开指针与文件之间的联系,也就禁止再对该关闭文件指断开指针与文件之间的联系,也就禁止再对该文件进行操作。文件进行操作。磁盘已满、磁盘被移走或者出现磁盘已满、磁盘被移走或者出现I/O错误等都会导致错误等都会导致fclose函函数执行失败。数执行失败。第9章 文件操作 149.2文件的打开与关闭文件的打开与关闭不关闭文件可能会不关闭文件可能会

20、丢失数据丢失数据磁盘文件磁盘文件输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区程序数据区程序数据区a缓冲文件系统:缓冲文件系统:fclose 第9章 文件操作 159.3文件的读写文件的读写运用运用fopen成功打开文件后,都会有属于该文件的一个成功打开文件后,都会有属于该文件的一个文件读写位置指针,表示文件内部即将要读写的位置。文件读写位置指针,表示文件内部即将要读写的位置。文件指针和文件内部的读写位置指针是不同的文件指针和文件内部的读写位置指针是不同的9.3.1文件读写函数概述文件读写函数概述字符读写函数:字符读写函数:fgetc()和和fputc()字符串读写函数:字符串读写函

21、数:fgets()和和fputs()数据块读写函数:数据块读写函数:freed()和和fwrite()格式化读写函数:格式化读写函数:fscanf()和和fprinf()文本文件文本文件二进制文件二进制文件 第9章 文件操作 169.3文件的读写文件的读写文件指针和文件内部的读写位置指针是不同的文件指针和文件内部的读写位置指针是不同的文件指针文件指针指向整个文件指向整个文件,在程序中定义,只要不重新赋值,在程序中定义,只要不重新赋值,文件指针的值不变。文件指针的值不变。文件内部的读写位置指针用于指示文件内部的文件内部的读写位置指针用于指示文件内部的当前读写位当前读写位置置,每读写一次,该指针均

22、,每读写一次,该指针均自动向后移动自动向后移动,指向下一个读写,指向下一个读写单元。它不需在程序中定义,由单元。它不需在程序中定义,由系统自动设置系统自动设置。以以“r”或或“w”方方式式打打开开文文件件后后,该该文文件件读读写写位位置置指指针针初初始值指向文件开头始值指向文件开头;以以“a”方方式式打打开开文文件件后后,该该文文件件读读写写位位置置指指针针初初始始值值指指向文件末尾向文件末尾。第9章 文件操作 179.3文件的读写文件的读写对对文文件件进进行行读读写写操操作作时时,须须要要推推断断当当前前读读写写位位置置,假假如如文件读操作到最终,再进行读写操作就会出错。文件读操作到最终,再

23、进行读写操作就会出错。为了避开出错,为了避开出错,C供应了下面的方式推断文件是否读完供应了下面的方式推断文件是否读完1、对对于于文文本本文文件件,结结束束标标记记是是EOF(即即-1,在在stdio.h中中定定义义),可可以以通通过过读读取取的的字字符符是是不不是是结结束束标标记记来来推推断断文文本本文件是否读完;文件是否读完;2、对对于于二二进进制制文文件件,没没有有EOF的的结结束束标标记记,只只能能运运用用系系统供应的统供应的feof函数来推断;函数来推断;其其中中,fp是是文文件件指指针针变变量量,假假如如文文件件读读取取结结束束则则返返回回非非0值,没结束返回值,没结束返回0值。值。

24、3、文文本本文文件件可可运运用用feof函函数数按按上上面面形形式式来来推推断断是是否否读读取取结束。结束。while(!feof(fp)/*此处写入读操作语句此处写入读操作语句*/运用格式是:运用格式是:feof(fp)第9章 文件操作 189.3文件的读写文件的读写9.3.2字符读写函数字符读写函数(1)字符读函数)字符读函数fgetc()功能:从指定的文件中读一个字符;功能:从指定的文件中读一个字符;函数调用的一般形式:函数调用的一般形式:字符变量字符变量=fgetc(文件指针变量文件指针变量);【例】【例】ch=fgetc(fp1);/*从从fp1指向的文件中读取一个字符并送入变量指向

25、的文件中读取一个字符并送入变量ch中中*/说明:说明:在在fgetc函数调用中,读取的文件必需是以读或读写方式打开的函数调用中,读取的文件必需是以读或读写方式打开的读取成功返回文件当前位置的一个字符;读取成功返回文件当前位置的一个字符;读错误时返回读错误时返回EOF。第9章 文件操作 199.3文件的读写文件的读写9.3.2字符读写函数字符读写函数(2)字符写函数)字符写函数fputc()功能:将一个字符写入到指定文件中;功能:将一个字符写入到指定文件中;函数调用的一般形式:函数调用的一般形式:fputc(字符变量,文件指针变量字符变量,文件指针变量);【例】【例】fputc(ch,fp2);

26、/*将字符变量将字符变量ch中的字符写入到中的字符写入到fp2所指的文件中所指的文件中*/说明:说明:fputc函数也有返回值函数也有返回值若写操作成功,则返回向文件所写的字符;若写操作成功,则返回向文件所写的字符;否则返回否则返回EOF,表示写操作失败。,表示写操作失败。第9章 文件操作 20例例9-1用依次读取字符的方式,将用依次读取字符的方式,将source.txt文件的内容复制到文件的内容复制到destination.txt文件中。文件中。9.3文件的读写文件的读写voidmain()FILE*fp1,*fp2;charch;if(fp1=fopen(C:source.txt,r)=N

27、ULL)printf(Filecouldnotbeopened!n);exit(0);if(fp2=fopen(C:destination.txt,w)=NULL)printf(Filecouldnotbeopened!n);exit(0);while(ch=fgetc(fp1)!=EOF)fputc(ch,fp2);fclose(fp1);fclose(fp2);第9章 文件操作 219.3.3 字符串读写函数字符串读写函数(1)字符串读函数)字符串读函数fgets()功能:从指定的文件中读取一个字符串到程序中的字符数组功能:从指定的文件中读取一个字符串到程序中的字符数组函数调用的一般形式:

28、函数调用的一般形式:参参数数n是是一一个个正正整整数数,表表示示从从文文件件中中读读出出的的字字符符串串不不超超过过n-1个个字字符符。因因为为要要在在读读入入的的最最终终一一个个字字符符后后加加上上字字符符串串结结束束标标记记0。说明:说明:fgets函函数数从从文文件件中中读读取取字字符符直直到到遇遇见见回回车车符符或或EOF为为止止,或或直直到读入了所限定的字符数(至多到读入了所限定的字符数(至多n-1个字符)为止。个字符)为止。函数读成功返回字符数组首地址;失败返回空指针函数读成功返回字符数组首地址;失败返回空指针NULL。9.3文件的读写文件的读写fgets(字符数组名字符数组名,n

29、,文件指针文件指针);第9章 文件操作 229.3.2 字符读写函数字符读写函数(2)字符串写函数)字符串写函数fputs()功能:功能:将一个字符串写入到指定文件中将一个字符串写入到指定文件中函数调用的一般形式:函数调用的一般形式:字符串可以是字符串常量,也可以是字符数组名,或字符指针变量。字符串可以是字符串常量,也可以是字符数组名,或字符指针变量。【例例】char*ch=YouAreGood!fputs(ch,fp2);/*将字符指针将字符指针ch指向的字符串写入到文件指向的字符串写入到文件fp2中中*/说明:说明:若函数调用若函数调用fputs返回值为返回值为EOF时,表明写操作失败。时

30、,表明写操作失败。9.3文件的读写文件的读写fputs(字符串字符串,文件指针文件指针)第9章 文件操作 23例例9-2修改例修改例9-1程序,用读取字符串的方式,将程序,用读取字符串的方式,将source.txt文文件的内容复制到件的内容复制到destination.txt文件中。文件中。9.3文件的读写文件的读写voidmain()FILE*fp1,*fp2;charch80;if(fp1=fopen(C:source.txt,r)=NULL)printf(Filecouldnotbeopened!n);exit(0);if(fp2=fopen(C:destination.txt,w)=N

31、ULL)printf(Filecouldnotbeopened!n);exit(0);while(!feof(fp1)fgets(ch,81,fp1);fputs(ch,fp2);fclose(fp1);fclose(fp2);第9章 文件操作 249.3文件的读写文件的读写字符读写函数:字符读写函数:fgetc()和和fputc()字符串读写函数:字符串读写函数:fgets()和和fputs()格式读写函数:格式读写函数:fscanf()和和fprintf()数据块读写函数:数据块读写函数:fread()和和fwrite()第9章 文件操作 259.3.4 格式读写函数格式读写函数(1)格式

32、化读函数)格式化读函数fscanf功能:从指定的文件中依据确定的格式读取数据到程序中功能:从指定的文件中依据确定的格式读取数据到程序中fscanf与与scanf功功能能相相像像,区区分分在在于于fscanf的的读读取取对对象象是是磁磁盘盘文文件,件,scanf的读取对象是键盘。的读取对象是键盘。函数调用的一般形式:函数调用的一般形式:其中,格式字符串和输入表列和其中,格式字符串和输入表列和scanf函数相像。函数相像。【例】【例】fscanf(fp,%5d,&ai);说明:说明:函函数数的的返返回回值值若若为为EOF,表表明明格格式式化化读读错错误误;否否则则读读数数据据成成功。功。9.3文件

33、的读写文件的读写fscanf(文件指针文件指针,格式字符串格式字符串,输入表列输入表列);第9章 文件操作 26(2)格式化写函数)格式化写函数fprintf功能:把格式化的数据写到指定文件中功能:把格式化的数据写到指定文件中fprintf与与printf功功能能相相像像,区区分分在在于于fprintf是是向向文文件件中中输输出出,而而printf是向屏幕输出。是向屏幕输出。函数调用的一般形式:函数调用的一般形式:其中,格式限制字符串和输出项列表和其中,格式限制字符串和输出项列表和printf函数相像。函数相像。【例】【例】fprintf(fp,%5d,ai);说明:说明:函数的返回值为实际写

34、入文件中的字符个数(字节数);函数的返回值为实际写入文件中的字符个数(字节数);若写错误,则返回一个负数。若写错误,则返回一个负数。9.3文件的读写文件的读写9.3.4 格式读写函数格式读写函数fprintf(文件指针文件指针,格式限制字符串格式限制字符串,输出项列表输出项列表);第9章 文件操作 27例例9-3随机产生随机产生20个个10,99之间的整数,以每行之间的整数,以每行5个数据输个数据输出到文本文件出到文本文件c:data.txt中,要求每个数据占中,要求每个数据占5个宽度,并且数个宽度,并且数据之间用逗号分隔。然后将其读出按升序排序后,按同样格式据之间用逗号分隔。然后将其读出按升

35、序排序后,按同样格式追加写在原文件后,与原数据之间空出追加写在原文件后,与原数据之间空出2行。行。编程分析:编程分析:接受模块化程序设计接受模块化程序设计将产生数据、将数据输出到文件、从文件中读取数据,排序将产生数据、将数据输出到文件、从文件中读取数据,排序和追加数据到文件分别写成和追加数据到文件分别写成GetData()、PutDataToFile()、GetDataFormFile()和和sort()、AppendDataToFile()函数函数9.3文件的读写文件的读写 第9章 文件操作 28voidmain()inta20,i;GetData(a,20);PutDataToFile(a

36、,20);/*调用调用scandata()函数将数据读入到数组函数将数据读入到数组a中中*/GetDataFormFile(a,20);sort(a,20);/*调用调用sort()函数将数组函数将数组a的数据排序的数据排序*/*调用调用AppedDataToFile()函数将排序后的数组函数将排序后的数组a的数据写入到文件中的数据写入到文件中*/AppendDataToFile(a,20);voidGetData(inta,intn)inti;srand(time(NULL);/*初始化随机种子数初始化随机种子数*/for(i=0;in;i+)ai=(rand()%90)+10;/*产生产生

37、10,99的随机整数的随机整数*/9.3文件的读写文件的读写 第9章 文件操作 29voidPutDataToFile(inta,intn)inti;OpenFile(c:data.txt,w);for(i=0;in;i+)if(i%5=0)fprintf(fp,%5d,ai);elsefprintf(fp,%5d,ai);if(i+1)%5=0)fprintf(fp,n);fclose(fp);voidGetDataFormFile(inta,intn)/*从文件读数据函数从文件读数据函数*/inti;OpenFile(c:data.txt,r);for(i=0;in;i+)if(i%5=0

38、)fscanf(fp,%5d,&ai);/*每每1行的第行的第1个数据前不用逗号个数据前不用逗号*/elsefscanf(fp,,%5d,&ai);fclose(fp);9.3文件的读写文件的读写 第9章 文件操作 30voidsort(inta,intn)inti,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jaj)k=j;t=ai;ai=ak;ak=t;voidOpenFile(char*file,char*pr)if(fp=fopen(file,pr)=NULL)/*打开文件失败打开文件失败*/printf(Cannotopenfile,stikeanykey

39、toexit!);exit(0);/*退出程序退出程序*/9.3文件的读写文件的读写 第9章 文件操作 31voidAppendDataToFile(inta,intn)/*追加数据函数追加数据函数*/inti;OpenFile(c:data.txt,a);/*打开文件失败打开文件失败*/fprintf(fp,nn);/*输出输出2个空行个空行*/for(i=0;in;i+)if(i%5=0)fprintf(fp,%5d,ai);elsefprintf(fp,%5d,ai);if(i+1)%5=0)fprintf(fp,n);fclose(fp);9.3文件的读写文件的读写 第9章 文件操作

40、32#include#defineSTUNUM5/*代表学生人数代表学生人数*/#defineCOURSENUM3/*代表课程门数代表课程门数*/structstudentintsno;/*学号学号*/charsname10;/*学生姓名学生姓名*/intscoreCOURSENUM;/*每个学生的三门课成果每个学生的三门课成果*/stu1STUNUM,stu2STUNUM;例例9-4从键盘输入从键盘输入5个学生的学号、姓名和成果,将学生数据个学生的学号、姓名和成果,将学生数据写入文件,然后再从文件中将这些信息读出显示在屏幕上。写入文件,然后再从文件中将这些信息读出显示在屏幕上。9.3文件的读

41、写文件的读写 第9章 文件操作 33voidmain()FILE*fp;inti,j;if(fp=fopen(c:stu.txt,w+)=NULL)printf(Filecouldnotbeopened!n);exit(0);printf(inputdata:n);for(i=0;iSTUNUM;i+)/*从键盘输入学生数据从键盘输入学生数据*/scanf(%d,&stu1i.sno);scanf(%s,stu1i.sname);for(j=0;jCOURSENUM;j+)scanf(%d,&stu1i.scorej);9.3文件的读写文件的读写 第9章 文件操作 34for(i=0;iSTU

42、NUM;i+)/*学生数据写入文件中学生数据写入文件中*/fprintf(fp,%d,stu1i.sno);fprintf(fp,%s,stu1i.sname);for(j=0;jCOURSENUM;j+)fprintf(fp,%d,stu1i.scorej);rewind(fp);/*文件的位置指针移动到文件起先处文件的位置指针移动到文件起先处*/for(i=0;iSTUNUM;i+)/*将文件中学生数据读入程序中将文件中学生数据读入程序中*/fscanf(fp,%d,&stu2i.sno);fscanf(fp,%s,stu2i.sname);for(j=0;jCOURSENUM;j+)fs

43、canf(fp,%d,&stu2i.scorej);9.3文件的读写文件的读写 第9章 文件操作 35printf(nsnotsnamettscoresn);for(i=0;iSTUNUM;i+)/*将读出的数据显示在屏幕上将读出的数据显示在屏幕上*/printf(%dt,stu2i.sno);printf(%st,stu2i.sname);for(j=0;jCOURSENUM;j+)printf(%dt,stu2i.scorej);printf(n);fclose(fp);9.3文件的读写文件的读写 第9章 文件操作 369.3.5 数据块读写函数数据块读写函数(1)读取数据块函数)读取数据

44、块函数fread功能:功能:从指定文件中读取若干个数据块到程序中从指定文件中读取若干个数据块到程序中函数调用的一般形式为:函数调用的一般形式为:参参数数buffer是是一一个个指指针针,表表示示存存放放输输入入数数据据的的内内存存存存储地址;储地址;参数参数size表示一个数据块的字节数;表示一个数据块的字节数;参数参数count表示要读写的数据块块数。表示要读写的数据块块数。9.3文件的读写文件的读写fread(buffer,size,count,fp);第9章 文件操作 379.3.5 数据块读写函数数据块读写函数(2)写数据块函数)写数据块函数fwrite功能:功能:将若干个数据块写入到

45、指定的文件中将若干个数据块写入到指定的文件中函数调用的一般形式为:函数调用的一般形式为:参参数数buffer是是一一个个指指针针,表表示示存存放放输输出出数数据据的的内内存存存存储地址;储地址;参数参数size表示一个数据块的字节数;表示一个数据块的字节数;参数参数count表示要读写的数据块块数。表示要读写的数据块块数。9.3文件的读写文件的读写fwrite(buffer,size,count,fp);第9章 文件操作 38#include#defineSTUNUM5/*代表学生人数代表学生人数*/#defineCOURSENUM3/*代表课程门数代表课程门数*/structstudenti

46、ntsno;/*学号学号*/charsname10;/*学生姓名学生姓名*/intscoreCOURSENUM;/*每个学生的每个学生的3门课成果门课成果*/stu1STUNUM,stu2STUNUM;例例9-5改写例改写例9-4运用数据块读写函数从键盘输入运用数据块读写函数从键盘输入5个学生的学个学生的学号、姓名和成果,将学生数据写入文件,然后再从文件中将这些号、姓名和成果,将学生数据写入文件,然后再从文件中将这些信息读出显示在屏幕上。信息读出显示在屏幕上。9.3文件的读写文件的读写 第9章 文件操作 39voidmain()FILE*fp;inti,j;if(fp=fopen(c:stu.

47、dat,wb+)=NULL)/*二进制模式打开文件读和写二进制模式打开文件读和写*/printf(Filecouldnotbeopened!n);exit(0);printf(inputdata:n);for(i=0;iSTUNUM;i+)/*从键盘输入学生数据从键盘输入学生数据*/scanf(%d,&stu1i.sno);scanf(%s,stu1i.sname);for(j=0;jCOURSENUM;j+)scanf(%d,&stu1i.scorej);9.3文件的读写文件的读写 第9章 文件操作 40fwrite(stu1,sizeof(structstudent),STUNUM,fp)

48、;/*学生数据写入文件中学生数据写入文件中*/rewind(fp);/*文件的位置指针移动到文件起先处文件的位置指针移动到文件起先处*/fread(stu2,sizeof(structstudent),STUNUM,fp);/*将文件中数据读入程序中将文件中数据读入程序中*/printf(nsnotttsnametscoresn);for(i=0;iSTUNUM;i+)/*将读出的数据显示在屏幕上将读出的数据显示在屏幕上*/printf(%dt,stu2i.sno);printf(%st,stu2i.sname);for(j=0;j00 向后移动;向后移动;00 向前移动;向前移动;=0=0保

49、持不动保持不动起始点起始点文件起先文件起先 SEEK_SET 0 SEEK_SET 0文件当前位置文件当前位置 SEEK_CUR 1 SEEK_CUR 1文件末尾文件末尾 SEEK_END 2 SEEK_END 2例例fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);fseek函数函数9.3文件的读写文件的读写 第9章 文件操作 43ftell函数:函数:longftell(FILE*stream);返返回回文文件件读读写写位位置置指指针针的的当当前前值值,这这个个值值是是从从文文件件头头起起先先算算起起到到文文件件指指针针位位置置的的字字节节

50、数数,返返回的数为长整型数;回的数为长整型数;若返回若返回-1,表明出现错误。,表明出现错误。rewind函数:函数:intrewind(FILE*stream);用用于于将将文文件件内内部部的的读读写写位位置置指指针针移移动动到到文文件件的的起先处;起先处;成功时返回成功时返回0;否则,返回非;否则,返回非0值。值。9.3文件的读写文件的读写 第9章 文件操作 44#include#defineSTUNUM5/*代表学生人数代表学生人数*/#defineCOURSENUM3/*代表课程门数代表课程门数*/structstudentintsno;/*学号学号*/charsname10;/*学生

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 商业计划书

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁