概述:
在這篇文件中,講述對單個文件的數據加密、數據壓縮、自解壓的實現。同樣,也可以實現對多個文件或文件夾的壓縮,只要稍加修改便可實現。
關鍵字:加密壓縮、Zlib、流、資源文件
引 言:
在日常中,我們一定使用過WINZIP、WINRAR這樣的出名的壓縮軟件,就是我們開發軟件過程中不免要遇到數據加密、數據壓縮的問題!本文中就這一技術問題展開探討,同時感謝各位網友的技巧,在我每次面對問題要解決的時候,是你們辛苦地摸索出來的技巧總是讓我豁然開朗,問題迎刃而解。本篇文章主要是運用DELPH的強大的流處理方面的技巧來實現的數據加密壓縮,並用於實際的軟件程序開發中,將我個人的心得、開發經驗寫出來與大家分享。
1、 系統功能
1)、數據壓縮
使用Delphi提供的兩個流類(TCompressionStream和TDecompressionStream)來完成數據的壓縮和解壓縮。
2)、數據加密壓縮
通過Delphi編程中“流”的應用實現數據加密,主要采用Tstream的兩個派生類Tfilestream、Tmemorystream 來完成的;其中數據壓縮部分采用1)的實現方法
3)、雙擊壓縮文件自動關聯解壓
通過更改注冊表的實現擴展名與程序文件的關聯,主要采用Tregistry;並且,API函數SHChangeNotify實現注冊效果的立即呈現。
4)、可生成自解壓文件
自解壓的文件實現數據壓縮1)與數據加密壓縮2)的自動解壓;並且,通過資源文件的使用實現可執行的自解壓文件與數據文件的合並,來完成數據的自解壓實現。
2、 系統實現
2.1、工作原理
2.2、關鍵技術的講述
(一)ZLIB
1)、基類 TCustomZlibStream:是類TCompressionStream和TDecompressionStream 類的基類,它主要有一個屬性: OnProgress,在類進行壓縮或解壓縮的過程中會發生這個的事件 。
格式:Procedure OnProgress (Sender: TObject); dynamic;
2)、壓縮類TCompressionStream:除了繼承了基類的OnProgress 屬性外,又增加了一個屬性:CompressionRate,它的定義如下:
Property CompressionRate: Single read GetCompressionRate;
通過這個屬性,可以得到壓縮比。
它的幾個重要的方法定義如下:
Constructor TCompressionStream.Create (CompressionLevel: TCompressionLevel; Dest: TStream);
其中:TcompressionLevel(壓縮類型),它由如下幾個定義:
1)、 clNone :不進行數據壓縮;
2)、 clFastest:進行快速壓縮,犧牲壓縮效率;
3)、 clDefault:進行正常壓縮;
4)、 clMax: 進行最大化壓縮,犧牲速度;
Dest:目的流,用於存放壓縮過的數據。
Function TCompressionStream.Write (const Buffer; Count: Longint): Longint;
其中:Buffer:需要壓縮的數據;
Count: 需要壓縮的數據的字節數;
函數返回寫入流的字節數。
注意:壓縮類TCompressionStream的數據只能是寫入的,如果試圖從其內部讀取數據,將發生一個"Error "異常。需要壓縮的數據通過方法 Write寫入流中,在寫入的過程中就被壓縮,並保存在由構造函數提供的內存流(TmemoryStream)中,同時觸發 OnProcess 事件。
3)、 解壓縮類 TDecompressionStream&nbs
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一頁 >>