文件分类
文本文件(TextFile) & 二进制文件(Flie)
二进制形式存放数据占有存储空间较少,但不直观;文本文件与之相反
文件是由相同类型的数据元素组成的序列。在DELPHI中对文件操作提供强大的支持,常用的文件类型有三种:传统的Pascal文件,带句柄的文件和文件流
传统的Pascal文件
在Delphi中支持Pascal所使用的文件变量格式如F:TEXT或F:FILE。这种文件有带类型文件,文本件和无类型文件三种类型,但在DELPHI6中,有些Pascal中常用的文件操作如Assignprn和Writeln可能会与WINDOWS句柄文件不兼容带句柄的文件
使用句柄指明文件,当创建或打开文件时可获得其句柄,通过句柄操作文件内容。Pascal文件句柄被封装在Windows文件句柄中,由于DELPHI使用PASCAL语法,有时还提供默认参数值,通过这些参数可以方便的调用API函数,并进行文件的I/O操作。文件流
文件流是TfileStream类的实例,经常用于访问磁盘文件,通过文件流可以便捷地对文件I/O操作
文本文件变量
定义:
Var文本文件变量名:TextFile;VarMyFile: TextFile;//该变量可以与一个文本文件相联系
文本文件变量
定义:
Var文本文件变量名:TextFile;VarMyFile: TextFile;//该变量可以与一个文本文件相联系
文本文件变量
定义:
Var文本文件变量名:TextFile;VarMyFile: TextFile;//该变量可以与一个文本文件相联系
文件操作
将变量与磁盘中文件关联
在此步骤中需要用到 Assignfile 方法,其声明格式为:
Procedure assignfile(var F;filename:string);其中 F 为声明的文件类型变量,Filename为磁盘中带路径的文件名。例如:将文件变量A与文件IIS.LOG关联:Assignfile(a,’c:\iis.log’);
打开(新建)文件
打开文件的方式有Reset、Rewrite、Append三种
Reset:声明格式为
Procedure reset(var a[:file;Recsize:word]);
以读的方式打开一个存在的文件
Rewrite方式:声明格式为
procedure rewrite(var a:file;recsize:word]);//word是一个可选参数,当文件是一个无类型的文件时,该参数用来定义无类型文件的尺寸大小
在磁盘上创建一个新文件,如有同名文件,将删除并创建新的空文件
Append方式:声明格式为
procedure append(var a:Textfile);
以写(追加)的方式打开一个存在的文件,并且将指针置于文件末尾
注意:
三种方式,如果指定的文件已经打开,将首先关闭该文件,然后再创建 / 打开它,当前文件指针置于空文件开头当使用 Append 和 Reset 的时候,如果打开的文件不存在,将会出现一个错误
文本文件的读写
用于从文本文件中读数据的过程为READ和READLN
声明格式为
procedure ReadLn([var F:Text]V1[,V2,...,Vn]);//从文件型变量 F 关联的文件中读取数据,赋值给 P1,P2...等变量
用于向文本文件中写数据的过程为write和writeln
,输出数据类型可以是:Char、Byte、ShortInt、Word、LongInt、Cardinal、Single、Real、Double、Extended、Currency、PChar、AnsiString、ShortString、String、Boolean、Bool
声明格式为:
procedure write([var F:Text]P1[,p2,...,Pn]);//向文件型变量 F 关联的文件中写入 P1,P2...等表达式的值//另外,在相应的数据后增加一个“:”和一个表示域的宽度的数字可以指定域宽和小数位,小数位的指定方法是在域宽数字后加“:”再加上表示小数点位数的整数
其中ReadLN 和 WriteLN
会将数据连同回车符一起读出或写入
而READ 和 WRITE
在读写数据时不带有回车符
例如:
从文件中读一个字符到字符变量CH中:Read(f,ch);
关闭文件
关闭文件的声明
Procedure CloseFile(var F);
文件使用完毕之后要关闭,以释放其所占用的内存资源,关闭文件的过程为:CloseFile(文本文件变量名);
行尾与文件尾的判断
判断当前文件指针是否处于行尾和文件尾
Function Eoln[(var F: Text)]:Boolean;//处于行尾返回 True,否则返回 False
Function Eof[(var F: Text)]:Boolean;//处于文件尾返回 True,否则返回 False//如果文件为空,Eof 函数返回值也是 True
文件流操作
利用文件流可以直接对磁盘上的文件进行操作,它可以一次性将大量的数据读出或写入磁盘,从而提高操作效率,在DELPHI
中定义了TfileStream
(文件流)类,用于操作文件流,它是Tstream
(流的基类)的子类,继承了Tstream
类的一般方法和属性,Tfilestream
类与TStream
类的关系如下所表示:
Tstream --》Thandlestream --》 Tfilestream
在TfileStream
类中常用的属性:
声明:
Property Handle:INTEGER;
作用:指明文件流所操作的资源句柄,为只读属性,可以通过读取此句柄获得API函数的句柄或调用文件管理函数
Position属性
声明:
Property position:int64;
作用:来源于Tstream类,通过此属性,可得到指针在流中的位置。
Size属性
声明:
Property size:int64;
作用:来源于Tstream类,用于表明流的大小。
在Tfilestream类中常用的方法
Create方法声明:
constructor Create(const filename:string;mode:word);overload;
作用:用于创建文件流的实例,其中参数FILENAME
用于指定创建的文件名,参数MODE
用于指定被创建文件的打开方式,包括打开模式和共享模式两部分,其取值见下表:
打开模式
fmCreate用给定的文件名创建文件,如此文件已经存在,则以写的模式打开此文件fmOpenRead以只读方式打开指定文件fmopenWrite以只写的方式打开指定文件,原内容将被完全覆盖掉。fmOpenReadWrite以修改方式打开指定文件
共享模式和其含义
Fmsharecompat与FCBs的打开模式相兼容fmShareExclusive独占方式打开(别的程序不能访问)fmShareDenyWrite只读方式打开(别的程序不能写)fmShareDenyRead只写方式打开(别的程序不能读)fmShareDenyNone没有限制,别的程序可以使用任何方式打开文件
Destroy方法
声明:
Destructor Destroy;override;
作用:用于撤消文件流实例;
3. Read方法
声明:
function read(var buffer;count:longint):longint;override;
作用:来源于ThandleStream类,用于从流中读数据
4. write方法
声明:
function write(const buffer;count:longint):longint;override;
作用:来源于Thandlestream类,用于向流中写数据。
5. seek方法
声明:
function seek(offset:longint;origin:word):longint;overload;virtual;
作用:来源于Thandlestream类,用于定位流中的指针,其中参数Origin取值及含义,如下表所表示
Sofrombeginning指针指向资源的开始位置sofromCurrent指针指向资源的当前位置soFromEnd指针指向资源的结束位置
CopyFrom方法
声明:
Function Copyfrom(Source:Tstream;count:int64):int64;
作用:来源于Tstream类,用于从指定的流中复制内容到其他流,当参数count>0时,从source的当前位置复制count个字节,当Conunt=0的时候,复制Source的所有数据。
7. ReadBuffer方法
声明:
Procedure readbuffer(var buffer;count:longint);
作用:来源于Tstream类,用于将流中的内容读到缓冲区。
8. WriteBuffer方法
声明:
Procedure WriteBuffer(const Buffer;Count:Longint);
作用:来源于Tstream类,用于将缓冲区的内容写入到流中