2016-04-23 15 views
3

Ich möchte eine zip Datei erstellen, die mehrere Dokumente enthält, Dokumente stammen aus meinem Dokumentenverzeichnis.Wie Sie mehrere Dokumente in einer Zip-Datei in iOS hinzufügen?

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]; 
    } 
} 

Aber wenn ich an der zip Datei aussehen zeigt es nur ein Dokument in der ZIP-Datei?

Antwort

1

Es sieht so aus, als ob Sie die Zip-Datei in jeder Schleifeniteration neu erstellen. Sie sollten stattdessen die Erstellung der ZIP-Datei aus der Schleife bewegen oder einfach nur das Anhängen angeben, wenn Sie die ZIP-Datei wie folgt zu erstellen:

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

By the way, sollten Sie auch CloseZipFile2 anrufen, wenn Sie mit fertig sind die Datei. In Ihrem Fall müssen Sie dies tun, nachdem Sie die Datei vor dem Ende der Schleife hinzugefügt haben. –

+0

Sir gibt es keine Option zum Anhängen in ZipArchive. –

+0

Ich habe "arrdocument", Array von Dateien, die ich in zip-Datei hinzufügen möchte. vorschlagen, wenn Sie die andere Möglichkeit haben, es zu tun. –

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

Es funktioniert für mich. –