Delphi如何處理不同類型的檔案

來源:互聯網
上載者:User

標籤:

參考:http://www.cnblogs.com/railgunman/articles/1800318.html

  程式設計當中,我們時常遇到需要處理檔案、目錄及磁碟機的情況,這裡將對如何處理不同類型的檔案進行講述

   主要包括如何使用 TFileStream 類封裝檔案的輸入/輸出以及如何利用 32 位windows的主要特徵——記憶體對應檔。將會學到如何建立一個封裝記憶體對應檔功能的 TMemoryMappedFile類,並用它在文字檔中進行文字查詢。還提供了一些關於選擇磁碟機、在樹形目錄中查詢檔案以及擷取檔案版本資訊的方法。使你對檔案、目錄及磁碟機有深入的認識

 

處理檔案的輸入/輸出

  你將要對三種檔案進行處理:文字檔、類型檔案、二進位檔案

  以下幾節是關於檔案輸入/輸出的講解。文字檔是指可被任意文字編輯器讀取的ASCII文本。類型檔案指包含有程式員定義的資料類型的檔案。二進位檔案包含其他所有的類型,它是對包含任意格式或無格式資料的檔案的統稱

文字檔的處理

  本文講述使用內建於 Object Pascal執行階段程式庫中的過程和函數處理文字檔的方法。在對文字檔進行任何處理之前,首先要開啟此文字檔。聲明變數:通過此變數可以引用一個文字檔。

  開啟一個檔案需要兩步:首先是 AssignFile(),它可以將檔案變數與一個檔案關聯起來。接著進行第二步:開啟檔案。有三種方法開啟檔案:使用 ReWrite()過程建立並開啟檔案,對於一個已經存在的檔案,此操作將使得檔案被覆蓋;使用Reset()過程唯讀地開啟一個檔案;使用Append()過程向已經存在的檔案追加文本。

  注意Reset()將以可讀寫方式開啟類型檔案和無類型檔案。可以使用 CloseFile()來關閉一個已經開啟的檔案

檔案的開啟和關閉

AssignFile 把一個外部檔案名稱和一個檔案變數相關聯
Reset 開啟一個存在的檔案,文字檔(唯讀),其他檔案(讀寫)
ReWrite 建立並開啟一個新檔案(或者覆蓋已有的檔案)
Append 以追加方式開啟一個檔案(只適用於文字檔)
CloseFile 關閉一個開啟的檔案
FileOpen 開啟一個特定的檔案並返迴文件控制代碼
FileCreate 建立一個給定檔案名稱的檔案,並返迴文件控制代碼
FileClose 關閉一個特定控制代碼的檔案

  後面的三個檔案主要提供系統內部使用,在檔案複製的編程過程中也往往會用到。它們操作的對象時檔案控制代碼,而不是檔案變數

檔案定位

Seek 把檔案當前位置移至指定部分
FilePos 返迴文件當前的位置
Eoln 返回行結束標誌
EOF 返迴文件結束標誌
FileSeek 改變當前檔案指標的位置

  還有一個問題,如何判斷檔案已開啟?要不要讀寫完成之後就關閉檔案,下次讀或寫時再開啟?

用 TFileStream

  對於通過 Byte 數組進行檔案操作的,在 FTP中經常會使用到,我也是在Delphi調用Web Service進行檔案的上傳和下載時找到這兩個函數的,挺好用的,推薦給大家。(申明:非本人所寫)

  <1>將Byte數組組建檔案

12345678910111213141516 procedure ByteArrayToFile(Const ByteArray : TByteDynArray; Const FileName : String);var    Conut : Integer;    F : File of Byte;    pTemp : Pointer;begin    AssignFile(F, FileName);    ReWrite(F);    try        Count := Length(ByteArray);        pTemp := @ByteArray[0];        BlockWrite(F, pTemp^, Count);    finally        CloseFile(F);    end;end;

  <2>將檔案產生Byte數組

1234567891011121314151617181920212223242526 function FileToByteArray(const FileName : String) :TButeBtnArray;const    BLOCK_SIZE = 1024;var    BytesRead, BytesToWrite, Count :Integer;    F :Filw of Byte;    pTemp : Pointer;begin    AssignFile(F, FileName);    Reset(F);    try        Count := FileSize(F);        SetLength(Result, Count);        pTemp := @Result[0];        BytesRead := BLOCK_SIZE;        while(BytesRead = BLOCK_SIZE) do        begin            BytesToWrite := Min(Count, BLOCK_SIZE);            BlockRead(F, pTemp^, BytesToWrite, BytesRead);            pTemp := Pointer(LongInt(pTemp)+BLOCK_SIZE);            Count := Count-BytesRead;        end;    finally        CloseFile(F);    end;end;

  

123456789101112131415 function Encrypt(mStr : String; mKey : String) :String;var    I, J :Integer;begin    J:=1;    Result := ‘‘;    for I:=1 to Length(mStr) do begin        Result := Result + Char(Ord(mStr[I] xor Ord(mKey[j]));        if J + 1 <= Length(mKey) then            Inc(J)        else            J:=1;      end;    {自己加步驟}end;

  

123456789101112131415 function Decrypt(mStr : String; mKey : String) :String;var    I,J: Integer;begin    J :=1;    Result := ‘‘;    {自己加步驟}    for I :=1 to Length(mStr) do begin        Result := Result + Char(Ord(mStr[I] xor Ord(mKey[J]));        if J+1 <= Length(mKey) then;            Inc(J)        else            J:=1;    end;end;

  

123456789101112 procedure TForm1.Button1Click(Sender : TObject);const    cKey1 = ‘誰想試試怎麼破‘;    cKey2 = ‘我可不願意這樣玩(1)我可不願意這樣玩(2)我可不願意這樣玩(3)‘;    cKey3 = ‘Memo2.Text := Decrypt(Encrypt(Memo1.Text, cKey), cKey);‘;var    S :String;    //加密後的字元begin    S := Encrypt(Encrypt(Encrypt(Memo1.Text, cKey1), cKey2), cKey3);    ShowMessage(S);    Memo2.Text := Decrypt(Decrypt(Decrypt(S, cKey3), cKey2), cKey1);end;

 

Delphi如何處理不同類型的檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.