文件的存取
C++Builder按照数据在磁盘的存取方式,将数据文件分成顺序存取和随机存取文件两种。
顺序存取文件(Sequential Access File)
简称“顺序文件”,数据写入驱动器的方式是后输入的数据放在以前输入数据的后面,按照数据的先后次序一个接一个的放。若要读取数据,也是由第一条记录开始读取,新增的数据放在旧数据的最后面。这种数据文件每一条记录的长度都不一样,虽然比较节约空间,可是每次查询都必须从头开始找起,越在后的数据找寻时间就越久。
随机存取文件(Random Access File)
简称“随机文件”,每一条记录在磁盘中所占的长度都相同。数据存入磁盘的方式没有先后次序的限制;由于每个数据占用的长度固定,查询时只要告知第几个数据便可利用公式算出该数据的位置,快速地存取那个数据。所以不管数据在前还是在后,找寻的时间都大约相同,至于每个数据所占磁盘空间长度应设置多长,必须以一条纪录长度最长的那个为基准,当每个数据实际长度差异很时,试用随机文件会比较浪费磁盘空间。
一、 数据文件的操作方式
数据文件是通过程序产生的,一般我们对数据文件的操作,大致采用下列七种方式来维护数据文件内的数据:
1.建立文件操作:用来产生一个新的数据文件并确定使用哪种存取模式来读写数据文件。
2.新增操作:在指定的数据文件中加入新的数据。
3.删除操作:在指定的数据文件中,将指定的数据去掉。
4.修改操作:在指定的数据文件中对指定数据的内容做修改。
5.查询操作:找出满足条件的数据显示在屏幕上,适用于少量的数据。
6.打印操作:找出满足条件的所以数据,由打印机列出,适用于大量数据。
7.分析操作:将满足特定条件的数据挑出来,作为统计、分析决策的参考。
二、 常用的文件函数
详细说明见下表
打开文件
语法:FILE*fopen(const char *filename,const char *mode);
功能:以指定模式打开文件
『说明』
1.char *filename:可以为一个字符串,用它来代表要打开的文件或设备,若文件不在目前的文件夹下,就必须在文件名前加上路径名称。
2.Char mode(模式):用来设置要打开文件属于哪种类型的数据文件以及数据存取模式,如下表:
二、 常用的文件函数
语法:int fclose(FILE *stream);
功能:将文件指针所对应的数据文件关闭
1.Stream为文件指针,fclose(file1);
2.任何已打开的文件,不再使用时,要记得关闭,这样才能将占用的缓冲区归还系统。
3.以w或a模式打开的文件,fclose函数会先将存放在缓冲区那的数据写入文件中,再将数据文件关闭。
Feof函数
语法:int fileno(FILE *stream)
功能:用来测试文件是否结束
1.再读取数据文件中的数据时,可用feof函数来判断文件的指针是否已经指到文件的结尾。
2.如果已经指到文件结尾,表示数据已经读完,feof函数值传回true,否则为false。
3.此函数一半再顺序文件中读取数据时,用来判断该文件是否读完。
Fileno函数
语法:int fileno(FILE *stream);
功能:将指定数据文件的代码(handle)传回
1.传回值为证书代码(handle),以byte为单位。
Filelength函数
语法:int filelength(int handle);
功能:将代码所代表数据文件的长度传回
1.传回值为长整形,以byte为单位。
顺序文件
“顺序文件”就是指数据在做存取的时候,学要按照数据存入的先后次序处理,就像使用录音带一样,如果你想听第五首歌,那么必须要绕过前四首。所以顺序文件在写数据的时候是按照一个接一个的顺序写入的,而读数据的时候也一样。顺序文件的特性和使用时机如下:
特性
1.每一条纪录长度可以不一样。
2.增加数据时,一定要从原有的数据的最后一条开始加入。
3.每次找寻数据时都要从头开始找起,不但费时而且操作效率低。
4.若每条数据的长度差异很大时,使用顺序文件来存数据可节省内存空间。
使用时机
1.每条记录长度无法确定时。
2.数据不经常做新增、修改和删除操作时。
3.处理数据时时按照顺序连续处理,而非跳来跳去。
一、顺序文件数据的写入
c++builder对顺序文件数据的写入,提供了fprintf函数。
语法:int fprintf(FILE *stream,const char *format[,argument,……]);
功能:一格式话讲数据写于文件中
1.Stream:文件指针必须和打开文件fopen函数的文件指针相同。
2.Format为格式化输出。
例子1
由键盘输入学生的资料并存入磁盘中。
『分析说明』
1.可以通过文字框输入学生的学号、姓名和成绩,如下图
2.源代码分析
#include
#include
FILE *outf; //定义一个文件指针
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
outf=fopen("c:\\studentinfo.txt","w+"); //打开c:\studentinfo.txt文件
}
void
【中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页】