Merge pull request #392 from ZipArchive/zip_empty_folder
avoiding creating an extra file to zip an empty folder
This commit is contained in:
commit
e38ad24bd8
@ -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;
|
||||
|
||||
|
@ -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];
|
||||
|
Loading…
Reference in New Issue
Block a user