Delphi中用於讀寫(I/O)的三種檔案型別 (轉)
中用於讀寫(I/O)的三種型別
一.舊pascal檔案型別
用舊檔案變數表示的檔案型別,比如 F:text,F:File. 定義了三類:有型別,無型別,字元型別以及一些Delphi的檔案操作.比如:AssignPrn,Writeln,這些檔案類和檔案控制程式碼不相容
二.Windows檔案控制程式碼(handle)
面向的Pascal的檔案控制程式碼封裝了Windows檔案控制程式碼型別,檔案操作函式庫則封裝了Windows 函式,比如"Fileread"就是了Windows API 函式"ReadFile",Delphi提供了一個Windows API操作介面如果熟悉Windows API,可以用Windows檔案句進行檔案操作.
三.檔案流(File Streams)
檔案流是TFileStream類的物件例項,檔案流是高層的檔案操作型別,TFileStream提供了一個控制程式碼屬性.用此屬性可操作Windows檔案控制程式碼型別.
如何選擇檔案型別
Windows檔案控制程式碼是較底層的檔案操作型別,提供了靈活的同步及非同步檔案讀寫控制,以下提供用Windows檔案控制程式碼型別對檔案同步及非同步操作的虛擬碼描述:
同步操作:
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
// check for eof
if (bResult && nBytesRead == 0, ) {
// we're at the end of the file
}
非同步操作:
// set up overlapped structure fields
gOverLapped.Offset = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent = NULL;
// attempt an asynchronous read operation
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
&gOverlapped) ;
// if there was a problem, or the async. operation's still pending ...
if (!bResult)
{
// deal with the error code
switch (dwError = GetLastError())
{
case ERROR_HANDLE_EOF:
{
// we're reached the end of the file
// during the call to ReadFile
// code to handle that
}
case ERROR_IO_PENDING:
{
// asynchronous i/o is still in progress
// do something else for a while
GoDoSomethingElse() ;
// check on the results of the asynchronous read
bResult = GetOverlappedResult(hFile, &gOverlapped,
&nBytesRead, FALSE) ;
// if there was a problem ...
if (!bResult)
{
// deal with the error code
switch (dwError = GetLastError())
{
case ERROR_HANDLE_EOF:
{
// we're reached the end of the file
asynchronous operation
}
// deal with other error cases
}
}
} // end case
// deal with other error cases
} // end switch
} // end if
雖然Windows檔案控制程式碼提供靈活的檔案控制,但須編寫更多的出錯處理程式碼,如果對
WindowsAPI不熟悉,使用Delphi推薦的舊檔案變數型別.
Delphi的舊檔案型別使用AssignFile,使檔案變數和物理檔案關聯,透過Delphi定義的
對檔案變數的各種操作,完成檔案的存取和操作.使用方便.以下提供對檔案變數類
型的操作程式碼描述:
var
F: TextFile;
S: string;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(F, OpenDialog1.FileName); { File ed in dialog box }
Reset(F);
Readln(F, S); { Read the first line out of the file }
Edit1.Text := S; { Put string in a TEdit control }
CloseFile(F);
end;
end;
檔案流是流(stream classes)的子類,所以使用他的一個優點就是能自動繼承其父類的屬性他能很容易的和其他的流類互操作,比如你如果想把一塊動態塊寫入,可以使用一個TFileStream和一個TMemoryStream來完成.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987425/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python:讀寫檔案(I/O) | 組織檔案Python
- 【Java I/O】如何用Java讀寫檔案Java
- Delphi的元件讀寫機制(三) (轉)元件
- delphi讀取ini檔案 (轉)
- Python|讀、寫Excel檔案(三種模組三種方式)PythonExcel
- 檔案I/O
- 使用IniEditor讀寫INI型別配置檔案型別
- Python中檔案的讀寫、寫讀和追加寫讀三種模式的特點Python模式
- 結合 Go 讀 APUE-基本檔案I/OGo
- Qt中用C++呼叫Python檔案的三種方法QTC++Python
- hdparm 測試硬碟讀寫速度I/O硬碟
- 各種型別檔案頭型別
- Linux中用st_mode判斷檔案型別Linux型別
- 檔案管理I/O筆記筆記
- Delphi與Word(三)取得Word檔案的資料 (轉)
- Delphi的元件讀寫機制(一) (轉)元件
- Delphi的元件讀寫機制(二) (轉)元件
- 如何編寫proto型別的檔案型別
- I/O流以及檔案的基本操作
- Linux系統中檔案時間常用的三種型別!Linux型別
- VB讀寫ini檔案 (轉)
- .net內常用的幾種檔案型別型別
- 測試boot庫下I/O模型型別boot模型型別
- sap table 分為三種型別(轉)型別
- 用ASP.net判斷上傳檔案型別的三種方法ASP.NET型別
- Delphi中布林型別辨析 (轉)型別
- PHP中資料型別轉換的三種方式PHP資料型別
- 檔案的讀寫
- shell下十二種讀檔案的方法(轉)
- PCX 圖象檔案格式的讀寫 (轉)
- 用Delphi編寫點對點傳檔案程式(1) (轉)
- 用Delphi編寫點對點傳檔案程式(2) (轉)
- 一起學Scala 檔案 I/O
- 【等待事件】等待事件系列(1)--User I/O型別事件型別
- Java學習筆記之I/O流(讀取壓縮檔案以及壓縮檔案)Java筆記
- ORACLE UTL_FILE檔案包的應用,檔案I/O操作Oracle
- 各種檔案用JS轉Base64之後的data型別JS型別
- C#關於讀寫INI檔案C#