我在文件目录中有一个需要压缩的文件夹。我能够压缩常规文件,但我无法压缩文件夹。
我提到了以下链接 How to zip folders in iPhone SDK? 但是这里文件夹中的文件是单独压缩的。我想压缩整个文件夹而不必处理浏览目录中的内容(文件/文件夹)并逐个压缩它们。
是否可以使用ZipArchive库执行此操作。如果可以,可以通过发布必要的代码解释一下吗?
谢谢。
答案 0 :(得分:4)
您不能使用ZipArchive执行此操作,但请查看SSZipArchive它可以使用+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath;
方法。
答案 1 :(得分:2)
// Path to store Zip
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* dPath = [paths objectAtIndex:0];
NSString* zipfile = [dPath stringByAppendingPathComponent:@"test.zip"] ;
// File Tobe Added in Zip
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GetAllCardList" ofType:@"xml"];
NSString *fileName = @"MyFile"; // Your New ZipFile Name
ZipArchive* zip = [[ZipArchive alloc] init];
if([zip CreateZipFile2:zipfile])
{
NSLog(@"Zip File Created");
if([zip addFileToZip:filePath newname:[NSString stringWithFormat:@"%@.%@",fileName,[[filePath lastPathComponent] pathExtension]]])
{
NSLog(@"File Added to zip");
}
}
答案 2 :(得分:2)
尝试SSZipArchive
$out = Users::join('images','images.user_id', '=', 'users.id')->selectRaw('users.*, count(images.user_id) as quantity')->groupBy('images.user_id')->get();
我用过
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirector;
创建zip文件夹。这是有效的。
答案 3 :(得分:0)
您需要在将所有文件添加到zip之前获取dir的内容,如示例中所示。在代码中逐个添加它们是相同的,所以只需获取一个列表然后运行列表。
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil];
如果您要查找特定文件,还可以使用谓词来过滤结果
NSPredicate *filter = [NSPredicate predicateWithFormat:@"self ENDSWITH '.png'"];
NSArray *pngs = [dirContents filteredArrayUsingPredicate:filter];