J'ai un fichier zippé, que je veux extraire le contenu de celui-ci. Quelle est la procédure exacte que je devrais faire pour y parvenir. Existe-t-il un cadre pour décompresser les fichiers dans le cadre de cacao ou l'objectif C. p>
7 Réponses :
Si vous voulez simplement décompresser le fichier, je vous recommanderais d'utiliser NSTASK code> pour appeler UNZIP (1). Il est probablement intelligent de copier le fichier sur un répertoire que vous contrôlez - probablement dans / TMP - avant de décompresser. P>
Vous ne contrôlez pas / TMP, tout le monde peut y écrire.
Graham: Mais c'est un bon endroit pour faire du travail temporaire pour éviter de clocer un dossier existant.
Utilisez NSTEMPORARYDirectory () Code> au lieu de / TMP code>, bien que vous soyez prudent, il se comporte un peu plus comme / var / tmp code>. Il sera nettoyé, mais ce n'est pas toujours à un redémarrage.
Si vous êtes sur iOS ou que vous ne voulez pas utiliser Utilisation: p> NSTASK code> ou autre, je recommande ma bibliothèque SSZIPARCHIVE . NSString *path = @"path_to_your_zip_file";
NSString *destination = @"path_to_the_folder_where_you_want_it_unzipped";
[SSZipArchive unzipFileAtPath:path toDestination:destination];
Pouvons-nous utiliser votre bibliothèque lors de la soumission de l'application sur l'Apple Store?
Est-il possible de bloquer les dossiers aussi?
sur le Mac Vous pouvez utiliser l'outil de ligne c'est un rapide et Solution sale. Dans la vie réelle, vous voudrez probablement faire plus de vérification des erreurs et consulter le omip code> intégré à l'aide d'un système NSTASK code>: Unzip code> Manpage pour des arguments fantaisistes. P> P>
Voici une version plus concise basée sur l'approche de Codingfriend1
+ (void)unzip {
NSString *targetFolder = @"/tmp/unzipped";
NSString* zipPath = @"/path/to/my.zip";
NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/unzip" arguments:@[@"-o", zipPath, @"-d", targetFolder]];
[task waitUntilExit];
}
-OpenFile: code> ( nsworkspace code>) est le moyen le plus simple que je connaisse. p>
Voici une version Swift 4 Similaire à la réponse de Sven Driemecker. Cette implémentation renvoie une booléenne qui détermine si le processus a été réussi ou non. Considère que le processus a réussi, même si des avertissements ont été rencontrés. P> La condition de retour peut être modifiée en Vous pouvez également capturer la sortie du processus à l'aide d'une instance retour process.terminationStatus == 0 code> pour ne même pas accepter les avertissements. P> < p> Voir DOCS DOCS pour plus de détails sur les diagnostics. P > tuyau code>. p>
Désolé, je suis nouveau dans ce blog. Mais à l'avenir le fera.