newDataWithError is nil
Opened this issue · 0 comments
passingwind commented
Open ZipArchive is OK, but when I create data from ZZEntry, I just get nil, Please help.
PS: The zip file created by ZipZap is OK, however, the other zip files created by other software will be error.
Code like this:
bool UnzipFileAtPath(char* srcFile, char* destPath)
{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSString* zipFilePath = [NSString stringWithUTF8String:srcFile];
NSString* destDirPath = [NSString stringWithUTF8String:destPath];
if(![destDirPath hasSuffix:@"/"])
{
destDirPath = [NSString stringWithFormat:@"%@/", destDirPath];
}
NSLog(@"[ZipZap] Begin Unzip File:%@", zipFilePath);
NSError * error;
NSData* rawZipData = [fileManager contentsAtPath:zipFilePath];
NSLog(@"[ZipZap] Raw Zip Data Length: %li", rawZipData.length);
ZZArchive* zipArchive = [ZZArchive archiveWithData:rawZipData error:&error];
if (error)
{
NSLog(@"[ZipZap] Error happened while open zip file: %@ Error: %@", zipFilePath, [error localizedDescription]);
return NO;
}
else
{
NSLog(@"[ZipZap] Zip Entries: %lui", zipArchive.entries.count);
}
for (ZZArchiveEntry* entry in zipArchive.entries)
{
NSString* entryFilePath = [destDirPath stringByAppendingString:entry.fileName];
if(entry.fileMode & S_IFDIR)
{
[fileManager createDirectoryAtPath:entryFilePath withIntermediateDirectories:YES attributes:nil error:nil];
}
else
{
NSError* createDataError;
NSData* newData = [entry newDataWithError:&createDataError];
if(createDataError || newData == nil || newData.length == 0)
{
NSLog(@"[ZipZap] Create Data from ZZEntry Error: %lui", createDataError.code);
return NO;
}
else
{
NSUInteger length = [newData length];
NSLog(@"[ZipZap] File: %@, Length: %lu", entry.fileName, length);
}
NSError* writeDataError;
BOOL ret = [fileManager createFileAtPath:entryFilePath contents:newData attributes:nil];
if(!ret)
{
NSLog(@"[ZipZap] Write Data Error: %@, Error: %li", entry.fileName, [writeDataError code]);
}
}
}
NSLog(@"[ZipZap] Unzip File OK!");
return YES;
}