Reputation: 3394
I am using objective zip in a project to unzip and store files to documents directory. Its working fine with iOS 5.0 and below versions. Working fine with 5.1 Simulator. But when working on 5.1 device, only a few files are unzipped. Nothing else is shown in the folder. below is the code used for unzipping and storage.
for (NSString *file in fileArray) {
// Get the file info/name, prepare the target name/path
ZipReadStream *readStream = [unzipFile readCurrentFileInZip];
FileInZipInfo *fileInfo = [unzipFile getCurrentFileInZipInfo];
fileNameString = [NSString stringWithFormat:@"%@",[fileInfo name]];
NSLog(@"fileNameString %@",fileNameString);
NSString *DirName = [targetFolder stringByAppendingPathComponent:moduleName];
NSLog(@"targetFolder %@",targetFolder);
NSLog(@"DirName %@",DirName);
NSLog(@"fileNameString %@",fileNameString);
if (![fileManager fileExistsAtPath:DirName isDirectory:nil]) {
[fileManager createDirectoryAtPath:DirName attributes:nil];
NSLog(@"created directory %@", DirName);
}
NSLog(@"fileNameString %@",fileNameString);
NSString *unzipFilePath = [DirName stringByAppendingPathComponent:fileNameString];
NSLog(@"unzipFilePath-- %@",unzipFilePath);
// Create a file handle for writing the unzipped file contents
if (![fileManager fileExistsAtPath:unzipFilePath]) {
NSString *dir = unzipFilePath;//[unzipFilePath stringByDeletingLastPathComponent];
if ([[fileNameString pathExtension] isEqualToString:@""]) {
[fileManager createDirectoryAtPath:dir attributes:nil];
NSLog(@"created directory %@", dir);
}
[fileManager createFileAtPath:unzipFilePath contents:nil attributes:nil];
}
fileHandle = [NSFileHandle fileHandleForWritingAtPath:unzipFilePath];
// Read-then-write buffered loop to conserve memory
do {
// Reset buffer length
[unzipBuffer setLength:BUFFER_SIZE];
// Expand next chunk of bytes
int bytesRead = [readStream readDataWithBuffer:unzipBuffer];
if (bytesRead > 0) {
// Write what we have read
[unzipBuffer setLength:bytesRead];
[fileHandle writeData:unzipBuffer];
} else
break;
} while (YES);
[readStream finishedReading];
// NOTE: Disable iCloud backup for unzipped file if applicable here!
/*...*/
//[fileHandle writeData:unZipped];
[fileHandle closeFile];
[unzipFile goToNextFileInZip];
}
[unzipFile close]; // Be sure to also manage your memory manually if not using ARC!
// Also delete the zip file here to conserve disk space if applicable!
[recievedData release];
NSLog(@"Delete -- %@", documentsDirectory);
[fileManager removeItemAtPath:documentsDirectory error:nil];
return YES;
}
Please help ! ! !
thanks in Advance
Upvotes: 0
Views: 805
Reputation: 318814
Use have the following method for unzipping a zip file using Objective-zip. This works fine under iOS 4.3 through 6.0 (and probably earlier and later too). The 'filename' parameter is the full path to the zip file.
- (BOOL)unzipPath:(NSString *)filename toDirectory:(NSString *)directory error:(NSError **)error {
if (error) {
*error = nil;
}
ZipFile *unzipFile = [[ZipFile alloc] initWithFileName:filename mode:ZipFileModeUnzip];
int cnt = [unzipFile numFilesInZip];
[unzipFile goToFirstFileInZip];
for (int i = 0; i < cnt; i++) {
FileInZipInfo *info = [unzipFile getCurrentFileInZipInfo];
NSString *name = info.name;
if (![name hasSuffix:@"/"]) {
NSString *filePath = [directory stringByAppendingPathComponent:name];
NSString *basePath = [filePath stringByDeletingLastPathComponent];
if (![[NSFileManager defaultManager] createDirectoryAtPath:basePath withIntermediateDirectories:YES attributes:nil error:error]) {
[unzipFile close];
return NO;
}
[[NSData data] writeToFile:filePath options:0 error:nil];
NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
ZipReadStream *read = [unzipFile readCurrentFileInZip];
NSUInteger count;
NSMutableData *data = [NSMutableData dataWithLength:2048];
while ((count = [read readDataWithBuffer:data])) {
data.length = count;
[handle writeData:data];
data.length = 2048;
}
[read finishedReading];
[handle closeFile];
}
[unzipFile goToNextFileInZip];
}
[unzipFile close];
return YES;
}
Upvotes: 5