问题
In my Application,I am taking screenshots of image View and then I am saving those screen shots in document folder of the application.Now I want to Email all those images with the same folder structure they are in.Zipping all the folders containing the images and then attaching the zip file to the mail will solve the problem but how can I zip these folders and then attach them to the mail?
Any help is appreciated!
回答1:
I have used this code to create a zip file of the documents directory of my app and it worked
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [paths objectAtIndex:0];
BOOL isDir=NO;
NSArray *subpaths;
NSString *exportPath = docDirectory;
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:exportPath isDirectory:&isDir] && isDir){
subpaths = [fileManager subpathsAtPath:exportPath];
}
NSString *archivePath = [docDirectory stringByAppendingString:@"/test.zip"];
ZipArchive *archiver = [[ZipArchive alloc] init];
[archiver CreateZipFile2:archivePath];
for(NSString *path in subpaths)
{
NSString *longPath = [exportPath stringByAppendingPathComponent:path];
if([fileManager fileExistsAtPath:longPath isDirectory:&isDir] && !isDir)
{
[archiver addFileToZip:longPath newname:path];
}
}
if([archiver CloseZipFile2])
NSLog(@"Success");
else
NSLog(@"Fail");
回答2:
ZipArchive is an Objective-C class to compress or uncompress zip files, which is base on open source code "MiniZip".
It can be used for iPhone application development, and cocoa on Mac OSX as well.
see this : http://code.google.com/p/ziparchive/downloads/list
回答3:
To create a zip file you can use ZipArchive Download the source code and add it to your project, add also libz.x.dylib (take a look at wiki).
Then in your header file add: #import "ZipArchive/ZipArchive.h"
To create a zip file is simple, just use the following code:
BOOL ret = [zip CreateZipFile2:l_zipfile];
// OR
BOOL ret = [zip CreateZipFile2:l_zipfile Password:@"your password"]; //
//if the Password is empty, will get the same effect as [zip CreateZipFile2:l_zipfile];
ret = [zip addFileToZip:l_photo newname:@"photo.jpg"];
if( ![zip CloseZipFile2] )
{
// error handler here
}
[zip release];
回答4:
I've used ZipArchive with success in the past.
It's pretty ligthweight and simple to use, supports password protection, multiple files inside a ZIP, as well as compress & decompress.
The basic usage is:
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ZipFileName" ofType:@"zip"];
ZipArchive *zipArchive = [[ZipArchive alloc] init];
[zipArchive UnzipOpenFile:filepath Password:@"xxxxxx"];
[zipArchive UnzipFileTo:{pathToDirectory} overWrite:YES];
[zipArchive UnzipCloseFile];
[zipArchive release];
This is for unzipping a folder/file. To zip folders is equally easy. To zip a file (or a fodler)
BOOL ret = [zip CreateZipFile2:l_zipfile];
// OR
BOOL ret = [zip CreateZipFile2:l_zipfile Password:@"your password"]; //
//if the Password is empty, will get the same effect as [zip CreateZipFile2:l_zipfile];
ret = [zip addFileToZip:l_photo newname:@"photo.jpg"];
if( ![zip CloseZipFile2] )
{
// error handler here
}
[zip release];
I have heard about ObjectiveC-Zip also.
回答5:
Easy mode: add ZipArchive to your project then:
NSString* zip = ...;
NSString* dir = ...;
[SSZipArchive createZipFileAtPath: zip withContentsOfDirectory: dir];
来源:https://stackoverflow.com/questions/8150185/how-to-zip-folders-in-iphone-sdk