壓縮

在 C# 解壓縮整個檔案(可覆寫舊檔)

最近在用 C# 寫程式,處理到解壓縮的部份,雖然它有很方便的方法

 

ZipFile.ExtractToDirectory(壓縮檔, 目的目錄);

 

不過實測後,發現一個問題,若目的已有相同的檔案,則會産生錯誤,所以要自行解決這個問題。

 

我原本想過三個方法。

 

第一個是先解壓縮在其它目錄,再全部移到指定的目錄,但缺點是可能會佔用太多空間。如果原本的檔案就很大,要解開的檔案也很大,硬碟空間不夠的情況,解壓縮就會失敗,所以這個方法就先放棄了。

 

第二個方去是先逐一檢查檔案是否存在,存在就先刪除。如此一來,先把舊檔案刪掉,空間就會多一點,比較不擔心空間不夠的問題,最後再用 ZipFile.ExtractToDirectory 解壓縮至指定目錄。

 

第三個方法同上,只是突然想到,乾脆在檢查是否存在之後,就直接解壓縮該檔案,不用等到最後再全部解壓縮。

 

重要度:
文章分類:

Swift 使用 ZipArchive 解/壓縮檔案

工作中有需要使用到壓縮與解壓縮 zip 檔案,原本 Mac 以為內建的壓縮功能就可以做到,如下:

https://developer.apple.com/documentation/compression

結果試了半天,也查了一堆資料,好像都無法做到。在查詢資料的過程中,也看到很多人推薦 ZipArchive,我也就用它來測試了。

https://github.com/ZipArchive/ZipArchive

ZipArchive 是 Objective-C 寫的專案,我是要用 Swift 去執行,底下記錄了詳細過程。如果對於 Swift 連結 Objective-C 想多了解一點,可參考這篇:Swift 連結 Swift、Objective-C、C++

ZipArchive 的 Github 專案上有教導如何安裝使用,因為我沒有使用其他安裝工具,所以我採取手動安裝,它主要方法有四:

  1. Add the SSZipArchive and minizip folders to your project.

  2. Add the libz and libiconv libraries to your target.

  3. Add the Security framework to your target.

  4. Add the following GCC_PREPROCESSOR_DEFINITIONS: HAVE_INTTYPES_H HAVE_PKCRYPT HAVE_STDINT_H HAVE_WZAES HAVE_ZLIB $(inherited).

 

底下逐一記錄過程。

重要度:
訂閱 壓縮