当前位置:编程学习 > Delphi >>

Delphi TStream文件处理 3

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

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

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

 

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

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

 

2.TStream类的方法
作为所有实际使用的所有流类的共同父类,

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

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

 

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

(1)Read虚方法。

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

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

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

(2)Write虚方法。

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

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

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

(3)Seek虚方法。

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

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

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

表9-2 Origin的取值和意义

取   值
 常 量 值
 意   义
 
soFromBeginning
 1
 文件流的开始位置
 
soFromCurrent
 2
 文件流的当前位置
 
soFromEnd
 3
 文件流的结尾位置
 

(4)CopyFrom方法。

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

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

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

 

(5)WriteComponent方法。

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

procedure WriteComponent(Instance: TComponent);

 

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

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

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

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

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

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

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

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

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

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

 

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类的Read、Write、CopyFrom等方法覆盖父类TStream的同名方法,实现文件的读、写、复制等操作。操作结束后,必须释放文件对象,以释放资源和数据缓冲区。

 

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

procedure LoadFromStream(Stream:TStream);

procedure SaveToStream(Stream:TStream);

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

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

 

补充:软件开发 , Delphi ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,