2010-11-21 25 views
0

Existe-t-il des bibliothèques qui fonctionnent dans Objective C pour compresser des dossiers entiers (et les décompresser)? Je l'ai regardé certains d'entre eux par la recherche, mais ils regardent comme ils exigent l'ajout d'accident fichiers individuellement et certains d'entre eux soi-disant ...Zipage d'un dossier dans Objective C

Il ressemble à cette bibliothèque pourrait fonctionner: http://bitbucket.org/dchest/osxzip/overview

Je ne sais pas s'il prend en charge les dossiers, cependant. Quelqu'un sait-il si c'est le cas ou si d'autres bibliothèques prennent en charge les dossiers compressés? Même le code d'exemple pour interagir avec la ligne de commande libz serait bien avec moi ...

Répondre

1

Vous pouvez utiliser NSTask pour exécuter le programme de ligne de commande ditto. Assurez-vous de consulter la page de manuel ditto pour connaître la bonne combinaison de drapeaux afin d'obtenir une compression compatible avec le Finder.

+0

Merci pour cette Link-- ne savait pas Idem pourrait compresser des dossiers. Après avoir regardé quelques choses, je pourrais finir par vouloir utiliser quelque chose de la ligne de commande parce que je suis en train de décider s'il faut aller avec Qt (pour la plateforme croisée, dans ce cas j'utiliserai 7-zip sur Windows via la ligne de commande et idem sur Mac) ou Objective C en ce moment ... –

1

Selon cet exemple: http://www.raywenderlich.com/1948/how-integrate-itunes-file-sharing-with-your-ios-app vous pouvez obtenir un objet NSData avec le et les données puis il suffit d'écrire Zippé avec [writeToFile de données ....]

- (NSData *)exportToNSData { 
    NSError *error; 
    NSURL *url = [NSURL fileURLWithPath:_docPath]; 
    NSFileWrapper *dirWrapper = [[[NSFileWrapper alloc] initWithURL:url options:0 error:&error] autorelease]; 
    if (dirWrapper == nil) { 
     NSLog(@"Error creating directory wrapper: %@", error.localizedDescription); 
     return nil; 
    } 

    NSData *dirData = [dirWrapper serializedRepresentation]; 
    NSData *gzData = [dirData gzipDeflate];  
    return gzData; 
} 
+0

Merci pour l'info, mais il est tout à fait possible que le répertoire que je zippe ait un nombre énorme de fichiers (10k +) et dépasse 200mb, donc je ne suis pas sûr que serait la meilleure approche (si elle le zips dans la RAM de toute façon). Serait-ce limité si j'avais autant de fichiers? (btw, je ne suis pas celui qui est venu avec cette structure de répertoire et l'ensemble de la chose 10k fichiers: P) –

+0

Je ne sais pas vraiment ... Je l'ai seulement utilisé pour Mac OS X jamais sur un iphone ... mais Je pense que ça devrait marcher. – Staeff

+1

Pour être pointilleux, quand les gens parlent de «zipper» des choses, ils signifient généralement le format PKZip, qui n'est probablement pas le même que celui de votre exemple de code. – JWWalker