用於檔案壓縮的微軟FCI/FDI庫介紹

來源:互聯網
上載者:User

本文簡單介紹一下微軟的FCI/FDI庫,希望對大家有所協助。

簡介:
FCI(File Compression Interface)和FDI(File Decompression Interface)是由微軟提供的用於壓縮和解壓縮的開發包。最大的好處是在WinNT、Win2000、WinXP下系統都提供了相應的API介面。所以,我們的程式不需要額外的壓縮庫。

API介紹:
FCI/FDI API 用到大量的回呼函數,具體函數的原型定義大家可以參考標頭檔。

一、 FCI

FCI包括5個API。
FCICreate 建立 FCI context
FCIAddFile 向 cabinet 中添加檔案
FCIFlushCabinet 結束當前的 cabinet
FCIFlushFolder 結束當前的folder 並建立新的 folder
FCIDestroy 銷毀 FCI context

HFCI DIAMONDAPI FCICreate(
PERF       perf,    //用於返回錯誤類型
PFNFCIFILEPLACED pfnfiledest, //用在一個檔案跨越多個cabinet時
    PFNFCIALLOC    pfnalloc,  //用來分配和釋放記憶體。
    PFNFCIFREE    pfnfree,
    PFNFCIOPEN    pfnopen, //一下6個分別處理檔案的建立、讀寫、
    PFNFCIREAD    pfnread, //關閉、定位以及刪除等。
    PFNFCIWRITE    pfnwrite,
    PFNFCICLOSE    pfnclose,
    PFNFCISEEK    pfnseek,
PFNFCIDELETE   pfndelete,
   PFNFCIGETTEMPFILE pfnfcigtf, //用於產生臨時檔案名稱
    PCCAB       pccab, //是一個CCAB結構的指標對壓縮檔的詳細描述
//比如:大小、名稱、路徑等。
void FAR *    pv      //返回一些context 參數。
);

BOOL DIAMONDAPI FCIAddFile(
HFCI         hfci, //由FCICreate建立的context
   char         *pszSourceFile,//被壓縮的檔案
   char         *pszFileName,//此檔案在壓縮包中的名稱
   BOOL         fExecute,  //解壓時檔案是否執行
   PFNFCIGETNEXTCABINET GetNextCab,//建立下一個cabinet時調用,這裡忽略
   PFNFCISTATUS     pfnProgress,//周期性的回呼函數,可以顯示壓縮的進度。
   PFNFCIGETOPENINFO   pfnOpenInfo,//開啟檔案返迴文件控制代碼及屬性
   TCOMP         typeCompress  //壓縮的類型
)

BOOL DIAMONDAPI FCIFlushCabinet(
HFCI         hfci,     //由FCICreate建立的context
    BOOL         fGetNextCab, //決定GetNextCab是否被調用
    PFNFCIGETNEXTCABINET GetNextCab,//當cabinet滿的時候調用
    PFNFCISTATUS     pfnProgress //同FCIAddFile
)

BOOL DIAMONDAPI FCIFlushFolder(
HFCI         hfci,      //參數同上
PFNFCIGETNEXTCABINET GetNextCab,
PFNFCISTATUS     pfnProgress
)

BOOL DIAMONDAPI FCIDestroy(
HFCI hfci
)
二、 FDI

FDI包括4個API。
FDICreate 建立 FDI context
FDIIsCabinet 判斷是否為CAB壓縮檔,是則返回其屬性
FDICopy 解壓
FDIDestroy 銷毀 FDI context HFCI DIAMONDAPI FDICreate(//參數與FCI相應參數差不多
PFNALLOC pfnalloc,
PFNFREE pfnfree,
PFNOPEN pfnopen,
PFNREAD pfnread,
PFNWRITE pfnwrite,
PFNCLOSE pfnclose,
pfnseek,
int cpuType,// CPU類型,32位FDI忽略此參數
PERF perf
)

BOOL DIAMONDAPI FDIIsCabinet(
HFDI hfdi,    //FDI context
int hf,       //開啟的檔案控制代碼
PFDICABINETINFO pfdici  //返回壓縮檔的一些屬性
)

BOOL FAR DIAMONDAPI FDICopy(
HFDI     hfdi,
char FAR   *pszCabinet, //待解壓檔案名稱
char FAR   *pszCabPath, //待解壓檔案的路徑
int      flags,   //保留,現在必須為0
PFNFDINOTIFY pfnfdin,  //回呼函數,用來處理FDI的通知
PFNFDIDECRYPT pfnfdid,  //保留,現在必須為NULL
void FAR   *pvUser   //作為參數傳給回呼函數pfnfdin,這裡設為NULL

)

注意事項:
1、 用到的庫CABINET.DLL,在安裝作業系統時已經有了。
2、 一個context只能在建立他的線程使用,如果要使用多線程必須建立多個context。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.