c语言数据存储采用文件形式,第10章数据存储—C语言中的文件.ppt

第10章数据存储—C语言中的文件

第10章 数据存储 —C语言中的文件 10.1 C文件概述 10.2 文件的打开与关闭 10.3 文件的顺序读写 10.4 文件的随机读写 10.5 文件程序设计示例 10.1 C文件概述 到目前为止,我们编写的C语言程序有一个很大的缺陷:数据不能保存,也就是说,程序与数据不独立。 程序的实现过程中,依赖于把数据保存到变量中,而变量是通过内存单元存贮数据的,当一个程序运行完成或终止运行,所有变量的数据不再保存。 文件是解决问题的有效办法,它通过把数据存储在磁盘文件中,得以长久保存。 文件(File)是指保存在外存储器上的一组数据的有序集合。它有3个主要特征: 文件被保存在外存储器上,如磁盘、磁带或光盘,可以长久保存; 文件中的数据是有序的,将按一定顺序存放和读取。一般情况下,数据的读取顺序与存储顺序相同; 文件中数据的数量可以是不定的,定义时不必象数组那样必须规定好大小,可以根据实际需要存储,它只受外存自由空间的限制。 10.1.1 文件的分类 C语言把文件看作为数据流,即数据以一维方式按顺序组织。 根据数据存储的形式,文件的数据流又分成字符流和二进制流,前者称为文本文件(或字符文件),后者称为二进制文件。 C语言源程序是文本文件,其内容完全由ASCII码构成,通过“记事本”等编辑工具可以对文件内容进行查看、修改等。C程序的可执行文件是二进制文件,它包含的是计算机内部的机器代码 10.1.2 缓冲文件系统 文件根据数据存取实现过程,分为缓冲文件系统与非缓冲文件系统。 缓冲文件系统:指系统会自动为每一个使用的文件分配一块缓冲区(内存单元),当C程序需要把数据存入磁盘文件时,首先把数据存入缓冲区,缓冲区真正把数据存入磁盘文件的工作由系统自动完成,其目的是为了提高文件操作速度。从磁盘读入数据同样也要经过缓冲区。 非缓冲文件系统:磁盘文件对应的缓冲区不是由系统自动分配,而需要编程者在程序中用C语句完成缓冲区分配。 缓冲文件系统工作原理 10.1.3 文件程序设计初探 【例10-1】用C语言编写程序,读取位图(BMP)文件中的基本信息。 一个BMP文件一般由四部分组成:文件头、位图信息头、颜色表和图形数据。本例主要读取的是BMP文件中文件头和位图信息头中的一些基本信息。 在本例中,首先定义了文件头结构类型BITMAPFILEHEADER和位图信息头结构类型BITMAPINFOHEADER ,在main函数中,调用fread()函数从BMP文件中读取一个BITMAPFILEHEADER结构的数据给变量fileHeader,并输出其中的相关成员信息,用同样的方法,再读取位图信息头中的信息并输出 读者在运行该实例时,可以根据注释信息自行调整输出项,也可以在学习完本章的知识后在此程序的基础上对BMP文件做进一步的操作。 文件操作步骤 (1)定义文件指针 (2)打开文件 (3)文件读、写操作 (4)关闭文件 文件类型指针 C语言中用结构类型FILE来描述文件缓冲区信息,并采用指针形式来指示文件缓冲区单元。 由于C语言中的文件操作都是通过调用标准函数来完成的,结构体指针的参数传递效率更高。因此,C语言文件操作统一以文件指针方式实现。定义文件类型指针的格式为: FILE *fp ; 10.2 文件的打开与关闭 10.2.1 打开文件 文件打开功能是用于指定被操作的文件名,并请求系统分配相应的文件缓冲区单元。文件打开由标准函数fopen( )实现,其调用的一般形式为: FILE *fp ; fp = fopen(文件名,文件使用方式) ; 文件使用方式 C语言允许同时打开多个文件,不同文件采用不同文件指针指示,但不允许同一个文件在关闭前再次打开。 为保证文件操作的可靠性,调用fopen( )时最好做一个判断,以确保文件正常打开后再进行读写。其形式为: if ((fp=fopen(“file1.txt”,”r”)) = = NULL) { printf(“File open error!\n”); exit(0); } 10.2.2 关闭文件 关闭文件通过调用标准函数fcolse( )实现,其一般格式为: fclose(文件指针) 该函数将返回一个整数,若该数为0表示正常关闭文件,否则表示无法正常关闭文件,所以关闭文件也应使用条件判断: if (fclose(fp)) { printf ( “Can not close the file!\n” ); exit(0); } 10.3 文件的顺序读写 文件最基本的数据操作有两个:从文件中读取信息(读操作)和把信息存放到文件中(写操作)。 C语言为文件的读写操作也定义了一系列

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值