2011-11-16 30 views
8

Trong ứng dụng của tôi, tôi đang chụp ảnh màn hình của Xem hình ảnh và sau đó tôi lưu các ảnh chụp màn hình đó vào thư mục tài liệu của ứng dụng.Làm thế nào tôi muốn Gửi tất cả những hình ảnh đó có cùng cấu trúc thư mục. các hình ảnh và sau đó đính kèm các tập tin zip vào thư sẽ giải quyết vấn đề nhưng làm thế nào tôi có thể nén các thư mục này và sau đó đính kèm chúng vào thư?Làm thế nào để nén các thư mục trong iPhone SDK?

Mọi trợ giúp đều được đánh giá cao!

Trả lời

18

Tôi đã sử dụng mã này để tạo ra một tập tin zip của tài liệu thư mục của ứng dụng của tôi và nó làm việc

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"); 
+0

Cảm ơn .. Nó đã hoạt động :) – Yogi

+0

Yogi tôi đang đối mặt với cùng một tình huống.u có thể chia sẻ mã của bạn – thavasidurai

+0

Tôi nghĩ rằng anh ta đã sử dụng đoạn mã trên @thavasidurai – Robin

1

Tôi đã sử dụng ZipArchive với thành công trong quá khứ.

Nó khá ligthweight và dễ sử dụng, hỗ trợ bảo vệ bằng mật khẩu, nhiều tệp bên trong ZIP, cũng như nén & giải nén.

Việc sử dụng cơ bản là:

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

này là dành cho giải nén một thư mục/tập tin. Để nén các thư mục cũng dễ dàng như nhau. Để nén một tệp (hoặc bộ lọc thức ăn)

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

Tôi cũng đã nghe nói về ObjectiveC-Zip.

+0

Cảm ơn bạn đã phản hồi.Tôi đã biết cách giải nén nội dung của tệp Zip và tôi đọc tài liệu trên google.But Tôi không nhận được cách tạo tệp zip mới và thêm các mục vào đó. – Yogi

+0

@Yogi vui lòng kiểm tra câu trả lời cập nhật của tôi. –

+1

Cảm ơn ... Chúng tôi có thể thêm hai tệp trong cùng một tệp zip.i.e.can mà chúng tôi gọi [zip addFileToZip: l_photo newname: @ "photo.jpg"]; cho nhiều tập tin? Khi tôi thử nó kết thúc với chỉ một tập tin trong zip. – Yogi

2

ZipArchive là lớp Objective-C để nén hoặc giải nén tệp zip, dựa trên mã nguồn mở "MiniZip".

Nó cũng có thể được sử dụng để phát triển ứng dụng iPhone và ca cao trên Mac OSX.

thấy điều này: http://code.google.com/p/ziparchive/downloads/list

2

Để tạo một file zip, bạn có thể sử dụng ZipArchive Tải về mã nguồn và thêm nó vào dự án của bạn, thêm cũng libz.x.dylib (hãy nhìn vào wiki).

Sau đó, trong tập tin tiêu đề của bạn thêm: #import "ZipArchive/ZipArchive.h"

Để tạo một file zip rất đơn giản, chỉ cần sử dụng đoạn mã sau:

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

nó chỉ tạo thành tất cả các tài liệu chứa trong một tệp định dạng zip nhưng nó không làm giảm kích thước của tệp zip. làm thế nào chúng ta có thể giảm kích thước của tập tin zip? xin vui lòng hướng dẫn. Cảm ơn trước. – Nico

1

dễ dàng chế độ: thêm ZipArchive để dự án của bạn sau đó:

NSString* zip = ...; 
NSString* dir = ...; 
[SSZipArchive createZipFileAtPath: zip withContentsOfDirectory: dir]; 
Các vấn đề liên quan