程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi TStream文件處理 3

Delphi TStream文件處理 3

編輯:Delphi

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類

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved