TFileStream類使得應用程序可以從磁盤的文件中讀取數據。
類關系 TObject->TStream->THandleStream
使用TFileStream類可以訪問磁盤文件的信息。該類將打開一個全程的文件,並提供方法來讀取該文件。如果應用程序中已經定義了該文件的句柄,可以使用THandleStream對象以同樣的模式打開該文件。
方法列表
~TFilStream 刪除TFileStream類的實例
TFileStream 創建TFileStream類的實例
方法
TFileStream::~TFileStream
刪除一個TFileStream類的實例。
TFileStream::~TFileStream(void);
在應用程序中一般不直接調用~TFileStream方法,而是調用delete方法。~TFileStream 方法將在釋放對象前關閉文件流的句柄。
TFileStream::TFileStream
創建一個TFileStream類的實例。
__fastcall TFileStream(const System::AnsiString FileName,Word Mode);
不要直接利用TFileStream來實例化讀取或嶼寫入文件中的文件流。用new進行,把文件名和文件打開的方式作為參數傳遞:
參數Mode指明文件打開的方式。Mode由打開模式與共享模式組成。打開模式取值見下表:
模式 含義
fmCreate 創建一個指定文件名的文件,如果指定文件名的文件已經存在,則以寫模式打開
fmOpenRead 以只讀方式打開文件
fmOpenWrite 以寫模式打開文件,寫到文件的內容將替換文件以前的內容
fmOpenReadWrite 打開文件來修正文件的內容,而不是替換它們
共享模式如下表:
模式 含義
fmShareCompat 共享與經FCBs方式打開的兼容
fmShareExclusive 其他的應用程序不能打開該文件
fmShareDenyWrite 其他的應用程序只能以只讀方式打開文件
fmShareDenyRead 其他的應用程序只能以寫方式 打開文件
fmShareDenyNone 其他的應用程序可以以任何方式打開文件
如果文件不能被打開,將引發一個異常。
//-------------------------------------------------------------------------
THandleStream
THandleStream表示一個流對象,該對象可以便應用程序讀取一個Windows句柄標志的資源。
類關系
使用THandleStream對象可以訪問文件、接口、磁盤、郵件或其他可以提供Windows句柄的信息資源。例如,FileOpen函數可以提供磁盤上一個文件的Windows句柄。THandleStream對象在使用Windows 句柄進行I/O操作時要求應用程序使用統一的流接口。為了避免管理文件句柄時的額外消耗,可以使用TFileStream對象處理磁盤文件。
屬性列表
Handle 流從中讀取的信息資源的句柄
Size Handle屬性指定資源的字節長度
方法列表
~THandleStream 取消THandleStream實例並釋放內存
Read 讀取Count字節的內容到緩沖區中
Seek 重設句柄流的當前位置
SetSize 設置文件結尾標志
THandleStream 創建一個THandleStream類的實例
Write 將Count個字節的數據寫到當前位置
屬性
THandleStream::Handle
指定流從中讀取的信息資源的句柄。
__property int Handle={read = FHandle,nodefault};
從Handle屬性中可以獲得調用WindowsAPI時需要的句柄,或文件管理函數的句柄。為了讀取資源可以使用THandleStream對象中定義的方法。
Handle屬性是一個只讀屬性。不能通過改變句柄屬性使得句柄流在讀取操作中交換,反之亦然。例如,如果想將一個以只讀方式打開的文件句柄改變成寫模式必須使用下面給出的操作:
(1)釋放流對象。
(2)調用FileClose函數關閉文件。
(3)以寫模式重新打開文件,並使用句柄創建一個新的句柄對象的實例。然後,為文件打開一個TFileStream對象,並為流指定寫模式。
只能在THandleStream對象被取消後才能對Handle屬性調用FileClose函數。
THandleStream::Size
指定Handle屬性指定資源的字節長度。
__property int Size = {rea = GetSize,write = SetSize,nodefault};
屬性Size中決定了資源的字節長度。設置屬性Size可以截短資源中的信息。並不是所有的信息資源都可以使用支持屬性Size的THandleStream對象來訪問。例如,並不能對磁帶使用屬性Size。
方法
THandleStream::~THandleStream
~THandleStream釋放與THandleStream對象有關的內存。
__fastcall virtual ~THandleStream(void) { }
不要直接調用~THandleStream。用 drlete 進行,它會自動調用~THandleStream 。
THandleStream::Read
從與句柄流相應的資源中讀取count字節的內容到緩沖區中。
virtual int __fastcall Read(void * Buffer ,int Count ) ;
使用Read方法可以在文件的大小未知時從與指定句柄流相應的資源中讀取數據。Read方法將復制資源中Count字節的內容。復制內容從文件的當前位置開始,方法結束後文件的當前位置加上實際復制的字節數。Read 方法 返回實際復制的字節大小,如果文件不是足夠大則有可能該數值小於Count。所有其他的句柄流的數據讀取方法(例如RendBuffer, readComponent )都將調用Read方法來進行實際的讀取操作。
THandleStream::Seek
重設句柄流的當前位置。
virtual int __fasteall Seek(int Offset, Word Origin );
使用Seek 方法可以通過指定偏移量在與句柄流關聯的資源中移動當前位置。Seek 方法容許應用程序在資源中的特定位置讀取數據。
參數Origin指定如何解釋Offset參數,它可以取為下表中的任何一個數值。
值 含義
soFromBeginning 從資源開始處計算偏移量,當前位置將移到Offset處,Offset必須大於等於0
soFromCurrent 從當前位置計算偏移量,當前位置需要加上Offset
sofromEnd 從資源尾處計算偏移量,ffset必須小表等於0,表示距末尾處Offset字節的位置
Seek方法將返回Position屬性的新值,即資源流現在有位置。
THandleStream::SetSize
設置文件結尾標志,以便在指定位置截短資源。
virtual void __fastcall SetSize(int NewSize );
調用SetSize 方法可以設置資源的大小。Size 方法重載了繼承的方法,即容許資源的大小由句柄的改變來標志。方法SetSize將調用Seek 方法跳到指定位置,然後寫入一個文件尾標志。如果資源大小不能被改變將引發一個異常。例如,為一個設置為FrnOpenRead模式的文件句柄調用SetSize方法時將會引發一個異常。
THandleStream::THaandleStream
創建一個THandleStream類的實例。
__fastcall THandleSTream(int Handle);
調用Create方法可以為給定的句柄示例一個THandleStream類的實例。句柄必須在以相應的模式打開資源時獲得。例如,如果想從文件中讀取信息而創建一個句柄流,可以在模式fmOpenRead或fmOpenReadWrite下打開文件時獲得。如果想向文件中寫入信息而創建一個句柄流,可以在模式fmOpenWrite或fmOpenReadWrite下打開文件時獲得。
THandleStream::Write
將緩沖區中Count個字節的數據庫寫到資源的當前位置。
virtual int__fastcall Write(const void* Buffer,,int Count);
使用Write方法可以將Count個字節的數據從當前位置開始,寫入到與句柄流相關聯的資源中。在把數據寫入到資源後,Write方法將把當前位置加上寫入的實際字節大小,並返回實際寫入的字節大小。
所有其他的句柄流的寫入數據方法(例如WruteBuffer,WriteComponent)都將調用Write方法來進行實際的寫操作。