Merge pull request #392 from ZipArchive/zip_empty_folder

avoiding creating an extra file to zip an empty folder
This commit is contained in:
Antoine Cœur 2017-10-09 02:18:04 -05:00 committed by GitHub
commit e38ad24bd8
2 changed files with 8 additions and 27 deletions

View File

@ -91,8 +91,11 @@ typedef NS_ENUM(NSInteger, SSZipArchiveErrorCode) {
- (instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER;
- (BOOL)open;
- (BOOL)writeFile:(NSString *)path withPassword:(nullable NSString *)password;
/// write empty folder
- (BOOL)writeFolderAtPath:(NSString *)path withFolderName:(NSString *)folderName withPassword:(nullable NSString *)password;
/// write file
- (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName withPassword:(nullable NSString *)password;
/// write data
- (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename withPassword:(nullable NSString *)password;
- (BOOL)close;

View File

@ -683,9 +683,7 @@ BOOL _fileIsSymbolicLink(const unz_file_info *fileInfo);
{
if ([[NSFileManager defaultManager] subpathsOfDirectoryAtPath:fullFilePath error:nil].count == 0)
{
NSString *tempFilePath = [self _temporaryPathForDiscardableFile];
NSString *tempFileFilename = [fileName stringByAppendingPathComponent:tempFilePath.lastPathComponent];
success &= [zipArchive writeFileAtPath:tempFilePath withFileName:tempFileFilename withPassword:password];
success &= [zipArchive writeFolderAtPath:fullFilePath withFolderName:fileName withPassword:password];
}
}
complete++;
@ -742,8 +740,8 @@ BOOL _fileIsSymbolicLink(const unz_file_info *fileInfo);
Z_DEFAULT_STRATEGY,
password.UTF8String,
0);
unsigned int len = 0;
zipWriteInFileInZip(_zip, &len, 0);
const void *buffer = NULL;
zipWriteInFileInZip(_zip, buffer, 0);
zipCloseFileInZip(_zip);
return error == ZIP_OK;
}
@ -765,13 +763,10 @@ BOOL _fileIsSymbolicLink(const unz_file_info *fileInfo);
return NO;
}
const char *aFileName;
if (!fileName) {
aFileName = path.lastPathComponent.fileSystemRepresentation;
}
else {
aFileName = fileName.fileSystemRepresentation;
fileName = path.lastPathComponent;
}
const char *aFileName = fileName.fileSystemRepresentation;
zip_fileinfo zipInfo = {};
@ -867,23 +862,6 @@ BOOL _fileIsSymbolicLink(const unz_file_info *fileInfo);
return strPath;
}
+ (NSString *)_temporaryPathForDiscardableFile
{
static NSString *discardableFileName = @".DS_Store";
static NSString *discardableFilePath = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *temporaryDirectoryName = [NSUUID UUID].UUIDString;
NSString *temporaryDirectory = [NSTemporaryDirectory() stringByAppendingPathComponent:temporaryDirectoryName];
BOOL directoryCreated = [[NSFileManager defaultManager] createDirectoryAtPath:temporaryDirectory withIntermediateDirectories:YES attributes:nil error:nil];
if (directoryCreated) {
discardableFilePath = [temporaryDirectory stringByAppendingPathComponent:discardableFileName];
[@"" writeToFile:discardableFilePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
});
return discardableFilePath;
}
+ (void)zipInfo:(zip_fileinfo *)zipInfo setAttributesOfItemAtPath:(NSString *)path
{
NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:path error: nil];