iOS中使用ZipArchive 壓縮和解壓縮檔案

2022-03-29 21:27:39 字數 2830 閱讀 7381

引自

在本教程中,我將演示如何在ios程式中壓縮和解壓縮檔案。我們將使用乙個叫做ziparchive的第三方庫來實現。儘管壓縮和解壓縮有許多其他的方案可選,但是我覺得ziparchive庫是最快捷、最簡單的解決方案。let』s go。

為什麼我需要解壓縮檔案

有許多原因能解釋為什麼我要在工程中使用壓縮和解壓縮功能,下面是幾個常見的原因:

動態更新內容

工程設定

首先從google code上check out乙份**,svn位址是:

在終端中輸入如下命令即可check out了:

svn co 

把minizip資料夾和ziparchive.h以及ziparchive.mm檔案新增到你的工程中。

因為ziparchive不支援arc,所以如果你的工程開啟了arc,那麼就需要對ziparchive設定一下。在ziparchive.mm編譯選項中,增加-fno-objc-arc即可。

最後,需要為工程鏈結libz動態鏈結庫。

至此,ziparchive已經整合到你的工程中了,編譯工程,應該可以編譯成功。可能會有一些警告,這無關緊要,不影響編譯。但是作為乙個態度嚴謹的程式設計師,我強烈建議你看一下這些警告是怎麼出現的,解決它們。請記住:在你的工程中,警告應該和錯誤一樣被嚴肅處理!

示例工程的執行效果如下圖:

好,接下來講一講具體的實現:

1.引入ziparchive的標頭檔案。

#import "ziparchive.h"

複製**

dispatch_queue_t queue = dispatch_get_global_queue(

dispatch_queue_priority_default, 0);

dispatch_async(queue, ^ [za unzipclosefile];

nsdata *imagedata = [nsdata datawithcontentsoffile:imagefilepath options:0 error:nil];

uiimage *img = [uiimage imagewithdata:imagedata];

nsstring *textstring = [nsstring stringwithcontentsoffile:textfilepath

encoding:nsasciistringencoding error:nil];

dispatch_async(dispatch_get_main_queue(), ^{

self.imageview.image = img;

self.label.text = textstring;

複製**

對上面的**做乙個簡單的解釋:

1. 在記憶體中解壓縮檔案

2. 將解壓縮的內容寫到快取目錄中

3. 使用解壓縮後的檔案

4. 更新ui

非常簡單吧!

壓縮檔案

接下來看一下怎麼進行檔案壓縮。在上面的步驟中,我們已經把乙個zip檔案解壓縮到快取目錄中。現在我們再把解壓縮出來的檔案重新壓縮為乙個zip檔案,並把這個zip檔案寫入到documents目錄裡去(omg,這兩個檔案太慘了,被反覆蹂躪)

在示例工程**中,我已經增加了乙個按鈕,並和乙個ibaction相關聯,按鈕的處理函式名為zipfilesbuttonpressed:,具體**如下:

- (ibaction)zipfilesbuttonpressed:(id)sender

nsarray *paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);

nsstring *docspath = [paths objectatindex:0];

paths = nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes);

nsstring *cachepath = [paths objectatindex:0];

ziparchive *za = [[ziparchive alloc] init];

[za createzipfile2:zipfile];

[za addfiletozip:imagepath newname:@"newphotoname.png"];

[za addfiletozip:textpath newname:@"newtextname.txt"];

bool success = [za closezipfile2];   

nslog(@"zipped file with result %d",success);

複製**

簡單解釋一下上面**的意思:

1. 獲取documents目錄,新的zip檔案要寫入到這個目錄裡。

2. 獲取caches目錄,要進行壓縮的檔案在這個目錄裡。

3. 獲取zip檔案的全路徑名。

4. 建立乙個ziparchive例項,並建立乙個記憶體中的zip檔案。需要注意的是,只有當你呼叫了closezipfile2方法之後,zip檔案才會從記憶體中寫入到磁碟中去。

5. 獲取要被壓縮的檔案的全路徑

6. 把要壓縮的檔案加入到zip物件中去,加入的檔案數量沒有限制,也可以加入資料夾到zip物件中去。

7. 把zip從記憶體中寫入到磁碟中去。

當點選按鈕之後,在應用的documents資料夾下應該有乙個叫newzipfile.zip的檔案。解壓這個檔案,就能解壓出那兩個被反覆蹂躪的檔案來

結論現在你知道如何使用ziparchive來壓縮和解壓縮檔案了。享受ziparchive的便利吧。示例工程已經很好的展示了這些基本用法,大家可以好好研究下。

iOS中使用鑰匙串

2014 05 05 22 40 7534人閱讀收藏 舉報 檔案保護用來保護 資料 而鑰匙串則用來保護 秘密 在這裡,秘密是指用來訪問其他資料的一小段資料。最常見的秘密就是密碼和私鑰了。鑰匙串中的條目都有幾個可搜尋的 屬性 和乙個加密過的 值 對於通用密碼條目,比較重要的屬性有賬戶 ksecattr...

在 iOS 中使用 iconfont

在講icon font之前,首先先來看看普通自定義字型是如何在ios中使用的,兩個原理是一樣的。這裡以kaushanscript regular為例 step 1 匯入字型檔案 將字型檔案拖入專案 ios支援的字型格式有 ttf otf,其他格式不確定 然後再在專案的資源池中確認字型檔案是否加入專案...

在iOS中使用icon font

在開發阿里資料ios版客戶端的時候,由於專案進度很緊,專案裡的所有圖示都是用最平常的背景方案來實現。而為了要相容普通屏與retina屏的裝置,蘋果要求每個背景圖都要以兩種尺寸存 閱讀器 icon font ios 在開發阿里資料ios版客戶端的時候,由於專案進度很緊,專案裡的所有圖示都是用最平常的背...