首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 壓縮解壓實戰:基於 gzip 的 CZip/CUnzip 類庫使用指南

     編輯:關於C++

本文介紹基於 GNU gzip 1.2.4a 原始碼封裝的 CZip/CUnzip 類庫,提供簡潔的 C++ 介面實現檔案壓縮與解壓縮,遵循 GPL 授權條款。

類庫架構

  • 動態連結庫輸出兩個類別:CZip(壓縮)、CUnzip(解壓縮)
  • 核心方法:SwapSize(const char* destFileName) — 執行壓縮/解壓縮
  • 異常處理:CZipException,透過 GetString() 取得錯誤訊息

專案整合步驟

  1. 專案包含 czip.h
  2. 連結 zipdll.lib(隱含連結 zipdll.dll)
  3. 將 zipdll.dll 放置於執行檔同目錄
  4. 亦可採動態載入 LoadLibrary/GetProcAddress(未測試)

使用範例

壓縮檔案

try {
    CZip myFileToZip("source_file.txt");
    myFileToZip.SwapSize("compressed.gz");
} catch (CZipException e) {
    cout << "壓縮失敗: " << e.GetString() << endl;
    delete &e;  // 注意:捕獲參考時不需 delete,此處原始碼可能筆誤
}

解壓縮檔案

try {
    CUnzip myFileToUnzip("compressed.gz");
    myFileToUnzip.SwapSize("decompressed.txt");
} catch (CZipException e) {
    cout << "解壓縮失敗: " << e.GetString() << endl;
}

常見錯誤情境

  • 來源檔案不存在或無法讀取
  • 目標檔案已存在(無法建立)
  • gzip 核心回傳錯誤(錯誤訊息來自 stderr)

重要注意事項

  • 副檔名陷阱:壓縮檔勿命名為 .zip,否則 WinZip 無法開啟(格式為 gzip 非 zip)。建議用 .gz
  • 單檔限制:此庫僅支援單一檔案壓縮,非 zip 封存格式
  • 相容性:WinZip 壓縮的單檔 .gz 可用 CUnzip 解開

授權條款

基於 gzip GNU 原始碼,遵循 GPL (General Public License)。詳細條款參考:GNU GPL 中文版

原始碼下載

完整類庫原始碼、DLL、範例專案已附於配套資源。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved