151 lines
7.7 KiB
C
151 lines
7.7 KiB
C
|
//
|
||
|
// SSZipArchive.h
|
||
|
// SSZipArchive
|
||
|
//
|
||
|
// Created by Sam Soffes on 7/21/10.
|
||
|
// Copyright (c) Sam Soffes 2010-2015. All rights reserved.
|
||
|
//
|
||
|
|
||
|
#ifndef _SSZIPARCHIVE_H
|
||
|
#define _SSZIPARCHIVE_H
|
||
|
|
||
|
#import <Foundation/Foundation.h>
|
||
|
#include "SSZipCommon.h"
|
||
|
|
||
|
NS_ASSUME_NONNULL_BEGIN
|
||
|
|
||
|
extern NSString *const SSZipArchiveErrorDomain;
|
||
|
typedef NS_ENUM(NSInteger, SSZipArchiveErrorCode) {
|
||
|
SSZipArchiveErrorCodeFailedOpenZipFile = -1,
|
||
|
SSZipArchiveErrorCodeFailedOpenFileInZip = -2,
|
||
|
SSZipArchiveErrorCodeFileInfoNotLoadable = -3,
|
||
|
SSZipArchiveErrorCodeFileContentNotReadable = -4,
|
||
|
SSZipArchiveErrorCodeFailedToWriteFile = -5,
|
||
|
SSZipArchiveErrorCodeInvalidArguments = -6,
|
||
|
};
|
||
|
|
||
|
@protocol SSZipArchiveDelegate;
|
||
|
|
||
|
@interface SSZipArchive : NSObject
|
||
|
|
||
|
// Password check
|
||
|
+ (BOOL)isFilePasswordProtectedAtPath:(NSString *)path;
|
||
|
+ (BOOL)isPasswordValidForArchiveAtPath:(NSString *)path password:(NSString *)pw error:(NSError * _Nullable * _Nullable)error NS_SWIFT_NOTHROW;
|
||
|
|
||
|
// Unzip
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination;
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(nullable id<SSZipArchiveDelegate>)delegate;
|
||
|
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path
|
||
|
toDestination:(NSString *)destination
|
||
|
overwrite:(BOOL)overwrite
|
||
|
password:(nullable NSString *)password
|
||
|
error:(NSError * *)error;
|
||
|
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path
|
||
|
toDestination:(NSString *)destination
|
||
|
overwrite:(BOOL)overwrite
|
||
|
password:(nullable NSString *)password
|
||
|
error:(NSError * *)error
|
||
|
delegate:(nullable id<SSZipArchiveDelegate>)delegate NS_REFINED_FOR_SWIFT;
|
||
|
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path
|
||
|
toDestination:(NSString *)destination
|
||
|
preserveAttributes:(BOOL)preserveAttributes
|
||
|
overwrite:(BOOL)overwrite
|
||
|
password:(nullable NSString *)password
|
||
|
error:(NSError * *)error
|
||
|
delegate:(nullable id<SSZipArchiveDelegate>)delegate;
|
||
|
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path
|
||
|
toDestination:(NSString *)destination
|
||
|
progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler
|
||
|
completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler;
|
||
|
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path
|
||
|
toDestination:(NSString *)destination
|
||
|
overwrite:(BOOL)overwrite
|
||
|
password:(nullable NSString *)password
|
||
|
progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler
|
||
|
completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler;
|
||
|
|
||
|
+ (NSMutableArray *)unzipFileAtPath:(NSString *)path
|
||
|
toDestination:(NSString *)destination
|
||
|
preserveAttributes:(BOOL)preserveAttributes
|
||
|
overwrite:(BOOL)overwrite
|
||
|
nestedZipLevel:(NSInteger)nestedZipLevel
|
||
|
password:(nullable NSString *)password
|
||
|
error:(NSError **)error
|
||
|
delegate:(nullable id<SSZipArchiveDelegate>)delegate
|
||
|
progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler
|
||
|
completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler;
|
||
|
|
||
|
// Zip
|
||
|
// default compression level is Z_DEFAULT_COMPRESSION (from "zlib.h")
|
||
|
// keepParentDirectory: if YES, then unzipping will give `directoryName/fileName`. If NO, then unzipping will just give `fileName`. Default is NO.
|
||
|
|
||
|
// without password
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray<NSString *> *)paths;
|
||
|
//without password and compression
|
||
|
+ (BOOL)createStoreZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray<NSString *> *)paths;
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath;
|
||
|
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory;
|
||
|
|
||
|
// with optional password, default encryption is AES
|
||
|
// don't use AES if you need compatibility with native macOS unzip and Archive Utility
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray<NSString *> *)paths withPassword:(nullable NSString *)password;
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray<NSString *> *)paths withPassword:(nullable NSString *)password withCompressionLevel:(int)compressionLevel;
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath withPassword:(nullable NSString *)password;
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory withPassword:(nullable NSString *)password;
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path
|
||
|
withContentsOfDirectory:(NSString *)directoryPath
|
||
|
keepParentDirectory:(BOOL)keepParentDirectory
|
||
|
withPassword:(nullable NSString *)password
|
||
|
andProgressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler;
|
||
|
+ (BOOL)createZipFileAtPath:(NSString *)path
|
||
|
withContentsOfDirectory:(NSString *)directoryPath
|
||
|
keepParentDirectory:(BOOL)keepParentDirectory
|
||
|
compressionLevel:(int)compressionLevel
|
||
|
password:(nullable NSString *)password
|
||
|
AES:(BOOL)aes
|
||
|
progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler;
|
||
|
|
||
|
- (instancetype)init NS_UNAVAILABLE;
|
||
|
- (instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER;
|
||
|
- (BOOL)open;
|
||
|
|
||
|
/// write empty folder
|
||
|
- (BOOL)writeFolderAtPath:(NSString *)path withFolderName:(NSString *)folderName withPassword:(nullable NSString *)password;
|
||
|
/// write file
|
||
|
- (BOOL)writeFile:(NSString *)path withPassword:(nullable NSString *)password;
|
||
|
- (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName withPassword:(nullable NSString *)password;
|
||
|
- (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes;
|
||
|
/// write data
|
||
|
- (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename withPassword:(nullable NSString *)password;
|
||
|
- (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes;
|
||
|
|
||
|
- (BOOL)close;
|
||
|
|
||
|
@end
|
||
|
|
||
|
@protocol SSZipArchiveDelegate <NSObject>
|
||
|
|
||
|
@optional
|
||
|
|
||
|
- (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo;
|
||
|
- (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath;
|
||
|
|
||
|
- (BOOL)zipArchiveShouldUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;
|
||
|
- (void)zipArchiveWillUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;
|
||
|
- (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;
|
||
|
- (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath unzippedFilePath:(NSString *)unzippedFilePath;
|
||
|
|
||
|
- (void)zipArchiveProgressEvent:(unsigned long long)loaded total:(unsigned long long)total;
|
||
|
|
||
|
@end
|
||
|
|
||
|
NS_ASSUME_NONNULL_END
|
||
|
|
||
|
#endif /* _SSZIPARCHIVE_H */
|