数据的永久存储文件程序设计PPT课件_第1页
数据的永久存储文件程序设计PPT课件_第2页
数据的永久存储文件程序设计PPT课件_第3页
数据的永久存储文件程序设计PPT课件_第4页
数据的永久存储文件程序设计PPT课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、。1,高级语言编程,第9章,数据永久存储文件编程。2,简介,到目前为止,我们编写的程序,无论是输入的原始数据,中间的计算结果还是最终的计算结果,都在程序运行和退出后消失了。输入后,原始数据存储在哪里?内存中的数据不能永久保存,程序退出后也不能控制内存中的数据,因为它们占用的内存已经被释放。尤其是当电脑关机时,内存中的数据就消失了。如何使数据永久存储?这必须借助外部存储器,将数据以文件的形式存储在外部存储器中,无论是原始数据还是中间结果或最终结果都可以保存在文件中。反过来,可以从文件中为各种计算服务读出存储的数据。本章要解决的问题是建立学生成绩管理系统的文件版本、学习目标、文件组织的概念、文本文

2、件和二进制文件的操作文件的定义方法、文件指针文件的打开方法、两种打开方法、各种读写方法、字符、字符串、行、行和行以及读写文件的定位。分析,保存学生信息记录到文件,或从文件中读取学生信息,输入和输出都不是键盘和屏幕,8、文件和目录,什么是文件?永久存储数据的介质是各种各样的“磁盘”,如磁盘、光盘、闪存盘等。在这些磁盘上存储数据应该很复杂。嘿。9、永久数据保存、文件数据库、10,文件和目录,操作系统有一个重要的组件文件管理模块,也叫文件系统。FILE系统封装了各种外部存储器的特性,所以我们可以用同一个接口使用不同的外部存储器,这就是所谓的“文件”。我们只需要指定以什么格式保存数据,使用什么文件名,

3、操作系统就会在外部内存中找到最佳位置并写入数据;相反,如果我们想从外部存储器读取数据,我们只需要告诉它文件名,操作系统就会找到文件在外部存储器上的位置并读取数据。嘿。目录树结构是文件系统的事实标准。每个文件都可以用唯一的“绝对路径”来表示。在Unix/Linux下:/用户/作业/主。c,12,文件存储格式,数据存储如下一般来说,一个源程序可以在编辑器中打开和看到,而我们看到的数据文件被视为一个字符序列,这种存储格式称为文本格式。嘿。13和数据文件也可以在编辑器中查看,或者以文本格式查看,如100分。1、0和0的ASCII码以文本形式存储,即0 x313030。更常用的是二进制格式存储,它将数据

4、转换成二进制格式存储,如100为整数,并将其转换成相应的二进制代码存储,即0x0000064二进制格式存储的数据在被编辑器打开时看不到它的真面目,显示“乱码”。15,文件分类,文本文件/二进制文件二进制文件以文本格式存储的文件称为文本文件,它们的扩展名通常是txt、c、cpp、dat和其他顺序文件/随机文件。按记录关键字的顺序存储的文件是顺序文件。可以随机访问的文件是随机文件。不管文件是什么,C语言都把它们看作一个有序的字节流。(1)声明文件(2)打开文件。(3)输入/输出(I/O)操作也称为读/写操作。(4)关闭打开的文件。嘿。18,FILE*指针,stdio.h定义了文件结构类型和一组文件

5、操作函数,19,文件结构的定义,typedef struct短层次;/*缓冲区满或空的程度*/无符号标志;/*文件状态标志*/char FD;/*文件描述符*/无符号字符保持;/*如果没有缓冲区,不要读取字符*/短b大小;/*缓冲区大小*/无符号char *缓冲区;/*数据缓冲区的位置*/无符号字符* curl/*指针当前指向*/无符号ist amp;/*临时文件指示器*/短令牌;/*用于有效性检查*/FILE;读取操作或输入操作是将数据从外部文件读取到内存中。写操作或输出操作是将数据从内存写入外部文件。您可以根据字符、记录或字节进行读写,但不能直接读入内存或写入外部内存。22,ANSI C缓

6、冲文件系统。编译器会自动为内存区域中使用的每个文件打开一个文件缓冲区。程序员只处理缓冲区。从内存输出到磁盘的数据必须先发送到内存中的缓冲区,然后在缓冲区填满后一起发送到磁盘。当数据从磁盘输入内存时,一批数据从磁盘文件输入内存缓冲区,然后数据从缓冲区一个接一个地发送到程序数据区,再到程序变量。嘿。24,缓冲区是内存中的一个区域。要读写它,你应该首先得到它的地址,也就是文件指针FILE *,25,也就是说,您必须在文件操作之前定义一个文件指针,如FILE *infile,*outfile,* fp有三个特殊的文件指针:标准输入(键盘也被认为是文件流)标准输入,标准输出(显示也被认为是文件流)标准输

7、出,以及标准错误(错误输出被认为是文件流)标准输出。嘿。26,打开文件,设置FILE * fpANSI C的文件打开函数fopen为fp=fopen(文件名,文件打开模式);如果fopen打开成功,将返回一个非空文件指针,如果打开失败,将返回一个空指针,其中文件名可以是绝对路径格式或相对路径格式。27,文本文件的打开模式,“r”:打开一个现有的文本文件进行输入。 w :创建新的或覆盖现有的文本文件进行输出。 a :创建一个新的文本文件或打开一个现有的文本文件,通过附加它来输出。嘿。28,“r”:打开一个现有的文本文件进行更新(意思是:它可以读写)。 w :创建新的文本文件或覆盖现有的文本文件进

8、行更新。 a :创建一个新的文本文件或打开一个现有的文本文件进行更新。嘿。29,二进制文件的打开模式类似于文本文件的六种打开模式。只有一个字符B“r B”、“wb”、“ab”、“Rb”、“wb”和“AB”被添加到打开模式字符串中,这与文本文件的打开模式具有相同的含义。30,注意:使用“W”嘿。31,文件关闭,fc lose(FP);嘿。32,典型文件创建代码(对应4个基本步骤),FILE * fp如果(FP=fopen(“input . txt”,“r”)=空)printf(“无法打开文件,按任意键退出!”);getch();出口(1);/文件读写fc lose(FP);嘿。33,ANSI C

9、文件操作功能,字符读写功能。int fputc(int c,FILE * FP);或宏int getc(FILE * FP);int putc(int c,FILE * FP);一次读写一个字符。34,例1:编写一个程序对源程序文件进行备份,这可以看作是一个字符序列,FILE *fp可以通过读写字符来实现;代码复制文件。35,思考问题,用命令行参数提供输入和输出文件名,实现文件复制命令复制文件1文件2。36,字符串读写,char *fgets(char *s,int n,FILE * FP);从文件中读出n-1个字符,并将它们存储在由S,int fputs(const char *s,FILE

10、 *fp)指向的字符数组中;示例2:从文件中读取一个包含10个字符的字符串,使用fgets(str,11,fp)从fp指向的文件中读取n-1个字符,并将它们发送到字符数组字符串,并在末尾自动添加0。代码fgets.c。38,示例3将一个字符串添加到文件中,并使用fputs(“abcd”,fp)函数将字符串ABCD写入FP所指向的文件中,代码fputs.c。39,读写格式(文本文件),int fscanf(文件* FP,常量*格式,)int fprintf(FILE *fp,const char *格式,);读写文本文件时看不到按照一定格式读写一组数据:当fp=stdin或stdout时,fsc

11、anf和fprintf与scanf和printf完全相同。40,示例4按顺序读取和写入学生信息,结构学生名称10;int num国际年龄;char addr15boya2,boyb2,*pp,* qqpp=boya/pp指向阵列boya qq=boyb嘿。41,以读写的形式打开一个文本文件,FILE * fp如果(fp=fopen(stuInfo.txt,w )=NULL)打印f(不能打开,按任意键!);getch();出口(1);嘿。42,依次构建文本文件,首先输入原始数据并将其存储在boya for数组中(I=0;请注意,pp已经指向数组的末尾。43,然后将boya中的数据保存到文本文件p

12、p=boya中;对于(I=0;iname,pp-num,pp-age,PP-addr);嘿。44,依次读取文本文件,首先将文本文件中的数据读入boyb数组并倒带(FP);/将文件内部位置的指针拉回到(I=0;Iname,45,然后在屏幕上显示数组中读取的数据qq=boyb对于(I=0;iname,qq-num,qq-age,QQ-addr);最后关闭文件。嘿。46,代码sqFscanfandFprintf.c,47,思考问题,在线评估输入输出数据文件,而不是键盘和屏幕。嘿。48,读写二进制文件功能根据数据块,读取几个数据块的大小_ t fread (void * ptr,size _ t si

13、ze,size _ t count,FILE *fp) ptr:存储输入数据的第一个地址大小:是每个数据块的大小计数:是数据块的数量大小t是无符号整数的别名。49,并一次写入几个数据块size _ t fwrite (const void * ptr,size _ t size,size _ t count,file * FP);Ptr:存储输出数据的第一个地址大小:是每个块的大小计数:是块的数量,50,示例5按块读写学生信息,如果(FP=fopen (stuinfo.dat,WB)=空)打印f(“不能打开,按任意键!);getch();出口(1);嘿。51,将原始数据输入到数组boya,pr

14、intf(nin put datan);对于(I=0;在某个时候。52,fwrite(pp,sizeof(struct stu),2,FP);将pp指向的两个学生结构数据写入fp指向的文件,倒带(FP);fread(qq,sizeof(struct stu),2,FP);从fp指向的文件中读出两个学生结构数据,保存到qq指向的数组中。53,并在屏幕上显示数据printf(nnname tnnumber age addrn);对于(I=0;iname,qq-num,qq-age,QQ-addr);关闭文件,54,代码freadfwriteStuRec.c,55,随机读写文件。随机文件是相对于某个

15、文件记录范围的,它不是从头到尾依次读写,而是随机确定一个位置(用户可以任意指定),然后在相应的位置写入记录或者从该位置读取数据。嘿。56,文件定位,无效倒带(FILE * FP);/将指针放在文件开头的内部位置;注意:它不是文件指针,而是文件内部的位置指针。随着文件的读写,文件的位置指针(指向当前读写字节)向后移动。文件指针指向整个文件,如果不重新分配,文件指针将不会改变。int f SEK(FILE * FP,长偏移量,int why);设置文件内部位置指针的位置。如果执行成功,则返回0。通常用于二进制文件。57,offset:“offset”,表示移动的字节数,偏移量是长数据,因此当文件长度大于64KB时不会出现错误。示例:f SEK(FP,100L,0);/将位置指针从第一个文件移开100字节。嘿。58,when:“起点”,表示计算位移的位置。有三个指定的起始点:文件头、当前位置和文件尾。起点表示符号编号,表示文件头SEEKSET0 SEEKCUR1的当前位置文件的结尾SEEKEND 2。59,示例6随机读取学生信息,代码为

温馨提示

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

评论

0/150

提交评论