2009-09-23 35 views
5

我有一些資源(壓縮),需要與我的iPhone應用程序一起發貨。當應用第一次啓動時,這個壓縮文件需要被移動/複製到Documents文件夾並在那裏解壓縮。用戶然後可以從應用程序添加更多文件到這個路徑。有人可以請建議我怎麼做到這一點?iPhone SDK - 在資源中添加壓縮內容,然後解壓縮到Documents文件夾中

謝謝!

+0

到目前爲止,下面的方法的一個小缺點是,您佔用了兩倍的空間來存儲這些資源;一個副本使您的應用程序更大,另一個副本位於Documents目錄中。你可能想要考慮你是否可以只生活一份。我想問的問題是你是否希望這些資源是讀/寫或只讀。如果是後者,那麼我建議你找到解決方法來複制它們。 – mahboudz 2009-09-23 10:47:04

+0

如果是隻讀的,但是您希望它們位於Documents文件夾中,因爲用戶可能會在其中添加一些其他文件,並且您希望它們都位於同一位置,那麼我會建議使用符號鏈接而不是複製文件。 – mahboudz 2009-09-23 10:48:22

回答

6

基於以上的評論:

我想因爲有多個 文件添加壓縮 資源的原因。如果我不壓縮,我會 需要單獨移動文件。我會 還需要維護一個文件列表 某處,以便我可以讀取文件 名稱,然後移動它們。我認爲 壓縮和解壓縮是一個更簡單的 解決方案。

您可以將所有文件添加到您的包中的文件夾。當應用程序第一次啓動時,使用快速枚舉運行該文件夾以及它在該文件夾中找到的內容,它將複製到「文檔」文件夾中。處理文件夾內的文件夾稍微複雜一點(可能會添加遞歸)。這樣你就不必擔心zip或者tar,也不需要保存一個安裝文件的目錄。

只需將需要的文件的文件夾放入Xcode的資源文件夾中,並告訴它將文件導入爲不作爲組。這樣,文件就會被安裝到資源文件夾內的資源中,而不僅僅是單個文件。

編輯:

更重要的是,做什麼,我說的把所有你想要的文件,一個文件夾中,添加到您的項目,而不是作爲一個「組」,然後在第一個推出使用:

[[NSFileManager defaultManager] copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error]; 

它會將您的整個目錄從一個地方複製到另一個地方。簡單!

4

libz.dylib框架添加到您的項目,幷包括Deusty's NSData gzip category這將給你壓縮/解壓縮的方法。

+0

如果可以根據需要解壓縮單個文件(文件或最好是NSData)(zip壓縮文件分別壓縮源文件並保留原始文件夾層次結構),則無需將所有文件解壓縮到臨時存儲器。不知道一個很好的兼容iPhone的lib,但這很容易。 – avocade 2010-06-08 00:20:48

3

雖然這可以通過使用libz.dylib,但它確實沒有必要,因爲它可以節省很少的空間(如果有的話)。您的應用程序包在傳輸到手機時已經被壓縮。壓縮之上的壓縮通常會產生很少的額外壓縮。

自己試一試。您可能會發現,使用解壓縮的內容傳送您的應用程序可能會佔用與壓縮內容一樣多的空間。

+0

我想添加壓縮資源的原因是因爲有多個文件。如果我不壓縮,那麼我需要單獨移動文件。我還需要在某處保存一個文件列表,以便我可以讀取文件名,然後移動它們。我認爲壓縮和解壓縮是一個更簡單的解決方案。 – Mithin 2009-09-23 04:47:29

+0

如果您只需要一種方法來存檔/取消存檔,並且不希望使用「zip」資源的時間複雜性,則可以使用'libtar'(http://www.feep.net/libtar/)。 – 2009-09-23 04:52:19

相關問題