2016-04-23 14 views
3

複数のドキュメントを含むzipファイルを作成したい場合、ドキュメントは私のドキュメントディレクトリから取得されます。iOSのzipファイルに複数のドキュメントを追加するには?

BOOL isDir=NO; 

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

NSArray *subpaths; 
for(int i=0; i<[arrdocument count]; i++) 
{ 
    NSString *toCompress = [arrdocument objectAtIndex:i]; 
    NSString *pathToCompress = [documentsDirectory stringByAppendingPathComponent:toCompress]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if ([fileManager fileExistsAtPath:pathToCompress isDirectory:&isDir] && isDir){ 
     subpaths = [fileManager subpathsAtPath:pathToCompress]; 
    } else if ([fileManager fileExistsAtPath:pathToCompress]) { 
     subpaths = [NSArray arrayWithObject:pathToCompress]; 
    } 

    NSString *zipFilePath = [documentsDirectory stringByAppendingPathComponent:@"myZipFileName2.zip"]; 

    ZipArchive *za = [[ZipArchive alloc] init]; 
    [za CreateZipFile2:zipFilePath]; 

    if (isDir) { 
     for(NSString *path in subpaths){ 
      NSString *fullPath = [pathToCompress stringByAppendingPathComponent:path]; 
      if([fileManager fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir){ 
       [za addFileToZip:fullPath newname:path]; 
      } 
     } 
    } else { 
     [za addFileToZip:pathToCompress newname:toCompress]; 
    } 
} 

しかし、私はzipファイルを見るときには、zipファイル内の1つの文書のみを示して?

答えて

1

各ループ反復でzipファイルを再作成したようです。あなたが代わりにループの外にzipファイルの作成を移動したり、ちょうどあなたがこのようなzipファイルを作成するときに追加指定する必要があります。

[za CreateZipFile2:zipFilePath append:YES]; 
+0

をところで、あなたがして終了したとき、あなたはまたCloseZipFile2を呼び出す必要がありますファイル。あなたの場合は、ループの最後の前に、ファイルを追加した後にそれを行う必要があります。 –

+0

sir ZipArchiveに追加するオプションはありません。 –

+0

私は "arrdocument"、私はzipファイルに追加したいファイルの配列を持っています。 には、別の方法があるかどうかが示唆されています。 –

0
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *zipFile = [documentsDirectory stringByAppendingPathComponent:@"compressed.zip"]; 
ZipArchive *zip = [[ZipArchive alloc] init]; 
BOOL result = [zip CreateZipFile2:zipFile]; 
if(result){ 
    NSError *error; 
    NSArray *allFiles = arrdocument; 
    for(int index = 0; index<allFiles.count; index++){ 
     id singleFileName = [allFiles objectAtIndex:index]; 
     NSString *singleFilePath = [documentsDirectory stringByAppendingPathComponent:singleFileName]; 
     [zip addFileToZip:singleFilePath newname:singleFileName]; 
    } 
    [zip CloseZipFile2]; 
}else{ 
    [self showErrorMessage:@"Unable to to create zip file. Please try again later" withTitle:@"Error"]; 
} 
+0

それは私のために働く。 –

関連する問題