2

ドキュメント ディレクトリに、圧縮する必要があるフォルダーがあります。通常のファイルは圧縮できましたが、フォルダーを圧縮できませんでした。

次のリンクを参照 しました iPhone SDKでフォルダーを圧縮する方法? しかし、ここではフォルダー内のファイルは個別に圧縮されています。ディレクトリ内の内容 (ファイル/フォルダー) を調べて 1 つずつ圧縮するのではなく、フォルダー全体を圧縮したいと考えています。

ZipArchive ライブラリでこれを行うことは可能ですか。必要なコードを投稿して説明してください。

ありがとうございました。

4

5 に答える 5

4

ZipArchive でそれを行うことはできませんが、使用できる方法があるSSZipArchive+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath; を見てください。

于 2013-05-07T20:26:25.870 に答える
2

SSZipArchive を試す

+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirector;

使った

let success = SSZipArchive.createZipFileAtPath(zipFullFilename, withContentsOfDirectory:dataDir, keepParentDirectory:true)

zipフォルダを作成します。それは働いています。

于 2016-03-18T10:43:46.400 に答える
2
// Path to store Zip    

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* dPath = [paths objectAtIndex:0];

NSString* zipfile = [dPath stringByAppendingPathComponent:@"test.zip"] ;

// File Tobe Added in Zip

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GetAllCardList" ofType:@"xml"];

NSString *fileName = @"MyFile"; // Your New ZipFile Name

ZipArchive* zip = [[ZipArchive alloc] init];
if([zip CreateZipFile2:zipfile])
{
    NSLog(@"Zip File Created");
    if([zip addFileToZip:filePath newname:[NSString stringWithFormat:@"%@.%@",fileName,[[filePath lastPathComponent] pathExtension]]])
    {
        NSLog(@"File Added to zip");
    }
}
于 2013-05-08T04:34:30.297 に答える
0

例のように、すべてのファイルを zip に追加する前に、dir の内容を取得する必要があります。それらを 1 つずつ追加することはコードで同じことなので、リストを取得してからリストを実行するだけです。

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil];

特定のファイルを探している場合は、述語を使用して結果をフィルタリングすることもできます

NSPredicate *filter = [NSPredicate predicateWithFormat:@"self ENDSWITH '.png'"];
NSArray *pngs = [dirContents filteredArrayUsingPredicate:filter];
于 2013-05-07T18:50:57.100 に答える