Delphi TStream文件处理 3

Delphi支持流,流包括文件、字符串、内存、二进制块、套接字、嵌入式对象等数据源。

Delphi定义TStream类作为所有流类的父类,TStream类有多个子类,每个子类分别处理特定的一种流

9.4.2 TStream

TStream类是所有流类的父类,其中定义了所有流的共同属性和方法。TStream是抽象类,不能创建该类的实例TStream类定义在Classes单元中。

 

1TStream类的属性

对流的读/写操作,每次所能读出/写入的字节数取决于流对象自身的大小,而读出/写入的数据与流对象中当前数据位置有关。

因此,TStream类定义了两个属性SizePositionSize属性指定流对象的大小,Position属性为在流中进行读/写操作指定当前位置。

 

2TStream类的方法

作为所有实际使用的所有流类的共同父类,

TStream类设计成抽象类,为所有子类提供共同的属性和方法声明。

TStream类中定义的方法大部分是虚方法和抽象方法,没有给出这些方法的具体实现,而必须由子类根据不同流的特性给出方法的具体实现。

 

TStream中定义的方法说明如下。

1Read虚方法。

该方法从流中读取指定数目的字节数据到缓冲区,并自动控制流指针的位置。声明  如下:

function Read(var Buffer; Count: Longint): Longint;virtual; abstract;

其中,参数Buffer为数据读出时存放的缓冲区,Count为需要读取数据的字节数,该方法返回值为实际读取的字节数,它可以小于或等于Count中指定的值。

2Write虚方法。

Write虚方法从缓冲区向流中写指定数目的字节数据,流指针自动移位。声明如下:

function Write(var Buffer; Count: Longint): Longint; virtual; abstract;

其中,参数Buffer为将要写入流的数据缓冲区,Count为数据的长度字节数,该方法返回值为实际写入流中的字节数。

3Seek虚方法。

Seek虚方法将文件流指针移动若干位置,返回移动后的指针位置。声明如下:

function Seek(Offset: Longint; Origin: Word): Longint; overload; virtual;

其中,Offset参数为移动字节数,Origin指定文件流指针的起始位置,Origin的取值和意义见表9-2

9-2 Origin的取值和意义

   

  

   

soFromBeginning

1

文件流的开始位置

soFromCurrent

2

文件流的当前位置

soFromEnd

3

文件流的结尾位置

4CopyFrom方法。

CopyFrom方法从指定文件流中复制指定数目的字节,并自动移动文件流指针,返回实际复制的字节数。声明如下:

function CopyFrom(source: TStream; count: LongInt): LongInt;

其中,source参数为源数据流,count为待复制的字节数。当count>0时,CopyFromsource的当前位置复制count字节;当count=0时,CopyFrom复制source的所有数据,并设置sourcePosition属性为0

 

5WriteComponent方法。

WriteComponent方法将组件的初始化及属性信息写入流中。方法声明如下:

procedure WriteComponent(Instance: TComponent);

 

3TStream类的子类

TStream类是抽象类,提供流操作的共同属性和方法,而没有提供对数据保存的直接支持。

TStream类的子类表示特定的流类,每个子类分别处理一种流。

实际使用时,根据数据的性质,创建TStream类的子类对象。例如,使用TFileStream类进行文件操作,使用TMemoryStream类处理内存中的流。

TStream类继承的子类必须覆盖ReadWriteSeek等虚方法,实现数据流的具体操作。TStream类的子类说明如下:

1TFileStream文件流,用于磁盘文件的读写操作。

2TStringStream字符串流,提供类似文件操作方式从长字符串中读写信息。

3TMemoryStream内存流,用于动态内存中的数据流的读写操作。

4TBlobStream块操作流,提供blob类型的数据流的读写操作。

5TwinSocketStream,用于以Socket方式连接的数据流的读写操作。

6TOleStream,为嵌入式对象提供数据流的读写操作。

 

9.4.3 TFileStream

TFileStream类是TStream类的子类,它继承了TStream类的属性和方法。使用TFileStream类进行文件存取操作,首先要建立TFileStream类的实例。其构造方法Create声明如下:

constructor Create(const FileName; string; Mode: Word);

其中,参数FileName为包括路径的文件全名;Mode为文件打开方式,包括打开模式和共享模式,其取值和含义见表9-3

9-3 Mode参数的取值和含义

   

   

   

打开模式

fmCreate

用指定的文件名打开它,若文件已存在则打开

fmOpenRead

以只读方式打开指定文件

fmOpenWrite

以只写方式打开指定文件

fmOpenRreadWrite

以读写方式打开指定文件

共享模式

fmShareCompat

共享模式与FCBs相兼容

fmShareExclusive

独占方式打开指定文件

fmShareDenyWrite

不允许别的程序以写的方式打开

fmShareDenyRead

不允许别的程序以读的方式打开

fmShareDenyNone

别的程序可以任何方式打开

例如,希望以只读的方式打开'E:\Temp\A.dat'文件,且不允许其他程序同时对该文件进行写操作,创建TFileStream类实例的语句如下:

f=TFileStream.Create('E:\Temp\A.dat', fmOpenRead or fmShareDenyWrite);

如果不指定共享模式,则默认值为fmShareExclusive。如果打开文件失败,则产生异常。

TFileStream类的ReadWriteCopyFrom等方法覆盖父类TStream的同名方法,实现文件的读、写、复制等操作。操作结束后,必须释放文件对象,以释放资源和数据缓冲区

 

9.4.4 /写流的类方法

许多类提供从流中读/写数据的LoadFromStream( )SaveToStream( )方法,声明如下:

procedure LoadFromStream(Stream:TStream);

procedure SaveToStream(Stream:TStream);

其中,Stream可以为TStream子类的任何对象。

拥有这两个读写流方法的类有TStrings类、TGraphic类及其子类TBitmapTIcon类、TPicture类和TMemoryStream

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值