Как заархивировать папки в iPhone SDK? - PullRequest
8 голосов
/ 16 ноября 2011

В моем приложении я делаю снимки экрана просмотра изображений, а затем сохраняю эти снимки экрана в папке документов приложения. Теперь я хочу отправить по электронной почте все эти изображения с той же структурой папок, в которой они находятся. Архивирование всех папок содержащий изображения, а затем прикрепив файл почтового индекса к почте, решит проблему, но как я могу сжать эти папки и затем прикрепить их к почте?

Любая помощь приветствуется!

Ответы [ 5 ]

18 голосов
/ 25 ноября 2011

Я использовал этот код для создания zip-файла каталога документов моего приложения, и это сработало

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 голосов
/ 16 ноября 2011

ZipArchive - это класс Objective-C для сжатия или распаковки zip-файлов, основанный на открытом исходном коде «MiniZip».

Его можно использовать для разработки приложений для iPhone, а также для какао в Mac OSX.

см. Это: http://code.google.com/p/ziparchive/downloads/list

2 голосов
/ 16 ноября 2011

Для создания zip-файла вы можете использовать ZipArchive Загрузите исходный код и добавьте его в свой проект, добавьте также libz.x.dylib (посмотрите вики).

Затем в заголовочном файле добавьте: #import "ZipArchive/ZipArchive.h"

Чтобы создать zip-файл просто, используйте следующий код:

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];
1 голос
/ 02 ноября 2015

Простой режим: добавьте ZipArchive в свой проект, затем:

NSString* zip = ...;
NSString* dir = ...;
[SSZipArchive createZipFileAtPath: zip withContentsOfDirectory: dir];
1 голос
/ 16 ноября 2011

Я использовал ZipArchive с успехом в прошлом.

Это довольно легкий и простой в использовании, поддерживает защиту паролем, несколько файлов внутри ZIP, а также сжатие и распаковка.

Основное использование:

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];

Это для разархивирования папки / файла. Застегнуть почтовые папки одинаково легко. Чтобы сжать файл (или фодлер)

           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];

Я также слышал о ObjectiveC-Zip .

...