12

iOS アプリケーションを開発していて、アプリケーションで作成したファイルを圧縮しようとしていますが、これを実行できる組み込み関数はありますか?

4

3 に答える 3

13

私は間違いなくObjective-Zipをお勧めします。最近、https ://github.com/flyingdolphinstudio/Objective-Zip に移動しました:

ドキュメントからのいくつかの例:

Zip ファイルの作成:

ZipFile *zipFile= [[ZipFile alloc] initWithFileName:@"test.zip" mode:ZipFileModeCreate];

zip ファイルへのファイルの追加:

ZipWriteStream *stream= [zipFile writeFileInZipWithName:@"abc.txt" compressionLevel:ZipCompressionLevelBest];

[stream writeData:abcData];
[stream finishedWriting];

zip ファイルからファイルを読み取る:

ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:@"test.zip" mode:ZipFileModeUnzip];

[unzipFile goToFirstFileInZip];

ZipReadStream *read= [unzipFile readCurrentFileInZip];
NSMutableData *data= [[NSMutableData alloc] initWithLength:256];
int bytesRead= [read readDataWithBuffer:data];

[read finishedReading];
于 2012-12-04T19:49:06.953 に答える
9

Alex が指摘したように、Cocoadev wiki のユーザーによって投稿されたNSData カテゴリを指摘することで、この質問に答えました。このカテゴリには、NSData インスタンス内の zip および gzip されたデータ (Zip ファイルから読み取ったり、Zip ファイルに書き込んだりできる) を処理するためのメソッドが含まれます。ファイルデータを NSData インスタンスにフィードできる限り、記述したファイル圧縮を実装するために必要なのはこれだけです。

このカテゴリの動作例については、私の iPhone アプリケーションMoleculesのソース コードを参照してください。このメソッドを使用して、gzip 圧縮されたファイル (SLSMolecule+PDB.m 内) からデータを抽出するだけですが、そこから基本的な概念を理解できるはずです。

于 2008-11-13T13:57:25.047 に答える
2

まず、 http://code.google.com/p/objective-zip/downloads/listから Objective-zip の例をダウンロードします。

この例では、Objective-Zip、MiniZip、および ZLib の 3 つのフォルダーを見つけてコピーし、プロジェクトにドラッグします。

あなたに2つのクラスをインポートします.mクラス「ZipFile.h」と「ZipWriteStream.h」

zipの作成方法私のコードは:-

-(IBAction)Zip{
self.fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory , NSUserDomainMask, YES);

NSString *ZipLibrary = [paths objectAtIndex:0];


NSString *fullPathToFile = [ZipLibrary stringByAppendingPathComponent:@"backUp.zip"];

//[self.fileManager createDirectoryAtPath:fullPathToFile attributes:nil];

//self.documentsDir = [paths objectAtIndex:0];


ZipFile *zipFile = [[ZipFile alloc]initWithFileName:fullPathToFile mode:ZipFileModeCreate];

NSError *error = nil;
self.fileManager = [NSFileManager defaultManager];
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);

self.documentsDir = [paths1 objectAtIndex:0];
NSArray *files = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:self.documentsDir error:&error];
//for(NSString *filename in files){
    for(int i = 0;i<files.count;i++){

        id myArrayElement = [files  objectAtIndex:i];


    if([myArrayElement rangeOfString:@".png" ].location !=NSNotFound){
            NSLog(@"add %@", myArrayElement);


    NSString *path = [self.documentsDir stringByAppendingPathComponent:myArrayElement];
    NSDictionary *attributes = [[NSFileManager defaultManager]attributesOfItemAtPath:path error:&error];
    NSDate *Date = [attributes objectForKey:NSFileCreationDate];

    ZipWriteStream *streem = [zipFile writeFileInZipWithName:myArrayElement fileDate:Date compressionLevel:ZipCompressionLevelBest];
    NSData *data = [NSData dataWithContentsOfFile:path];
    //  NSLog(@"%d",data);
    [streem writeData:data];
    [streem finishedWriting];
        }else if([myArrayElement rangeOfString:@".txt" ].location !=NSNotFound)
        {

            NSString *path = [self.documentsDir stringByAppendingPathComponent:myArrayElement];
            NSDictionary *attributes = [[NSFileManager defaultManager]attributesOfItemAtPath:path error:&error];
            NSDate *Date = [attributes objectForKey:NSFileCreationDate];

            ZipWriteStream *streem = [zipFile writeFileInZipWithName:myArrayElement fileDate:Date compressionLevel:ZipCompressionLevelBest];
            NSData *data = [NSData dataWithContentsOfFile:path];
            //  NSLog(@"%d",data);
            [streem writeData:data];
            [streem finishedWriting];
    }
}

[self testcsv];
[zipFile close];

}

あなたのドキュメント ディレクトリは、アイテム .png および .txt ファイルをライブラリ フォルダに backup.zip で圧縮して保存しました。これがお役に立てば幸いです

于 2012-01-23T09:48:11.517 に答える