Delphi中用于讀寫的文件類型精華篇

字號(hào):

一.舊pascal文件類型
    用文件變量表示的文件類型,比如 F:text,F:File. 定義了三類:有類型,無類型,字符類型以及一些Delphi的文件操作函數(shù).比如:AssignPrn,Writeln,這些文件類和Windows文件句柄不兼容
    二.Windows文件句柄(handle)
    面向?qū)ο蟮腜ascal的文件句柄封裝了Windows文件句柄類型,文件操作函數(shù)庫則封裝了Windows API函數(shù),比如"Fileread"就是調(diào)用了Windows API數(shù)"ReadFile",Delphi提供了一個(gè)Windows API操作接口如果熟悉Windows API,可以用Windows文件句進(jìn)行文件操作.
    三.文件流(File Streams)
    文件流是TFileStream類的對(duì)象實(shí)例,文件流是高層的文件操類型,TFileStream提供了一個(gè)句柄屬性.用此屬性可操作Windows文件句柄類型.
    如何選擇文件類型
    Windows文件句柄是較底層的文件操作類型,提供了靈活的同步及異步文件讀寫控制,以下提供用Windows文件句柄類型對(duì)文件同步及異步操作的偽代碼描述:
    同步操作: 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
    bResu = 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
    file://during/ asynchronous operation
    }
    // deal with other error cases
    }
    }
    } // end case
    // deal with other error cases
    } // end switch
    } // end if
    雖然Windows文件句柄提供靈活的文件控制,但須編寫更多的出錯(cuò)處理代碼,如果對(duì)WindowSAPI不熟悉,使用Delphi推薦的舊文件變量類型.
    Delphi的舊文件類型使用AssignFile,使文件變量和物理文件關(guān)聯(lián),通過Delphi定義的對(duì)文件變量的各種操作,完成文件的存取和操作.使用方便.以下提供對(duì)文件變量類型的操作代碼描述: var
    F: TextFile;
    S: string;
    begin
    if OpenDialog1.Execute then { Display Open dialog box }
    begin
    AssignFile(F, OpenDialog1.FileName); { File selected 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)的子類,所以使用他的一個(gè)優(yōu)點(diǎn)就是能自動(dòng)繼承其父類的屬性他能很容易的和其他的流類互操作,比如你如果想把一塊動(dòng)態(tài)內(nèi)存塊寫入磁盤,可以使用一個(gè)TFileStream和一個(gè)TMemoryStream來完成.