NSTask / Terminal
Excusez-moi si le titre n'est pas très explicite, mais J'ai découvert quelque chose de très bizarre..
Comme je cherche à décompresser les fichiers ZIP, je me suis penché vers le terminal. J'ai trouvé :
Pour l'exécuter dans mon application Cocoa, j'ai utilisé NSTask
Mon code marche très bien, la décompression est nickel.
J'ai cependant remarqué que lorsque je choisi de décompresser un ZIP qui contient une application, le NSTask ne se termine jamais ! Aucune erreur, la décompression s'est faite mais le task est tjrs en route...
J'ai aussi remarqué que lorsque la décompression est en cours, un dossier __MacOSX est créé. Une fois terminée, ce dossier disparaà®t et laisse place au dossier/fichier décompressé. Lorsque je décompresse une application, le dossier __MacOSX est tjrs là (puisque le task ne s'arrête jamais..), celui-ci contient l'application.. Mais l'application est aussi présente dans le dossier de destination.
Je récapitule : quand le ZIP contient une application, je me retrouve avec un task qui ne prend jamais fin + l'application décompressée + le dossier __MacOSX qui contient encore une fois l'application décompressée.
Alors je suis allé vérifier si le terminal me faisait pareil.
Et bien non ! Tapez :
Et là vous verrez que la décompression marche impeccablement bien !!!
Est-ce que quelqu'un comprend quelque chose à ce problème ??
Merci d'avance,
Louka.
Comme je cherche à décompresser les fichiers ZIP, je me suis penché vers le terminal. J'ai trouvé :
<br />ditto -x -k cheminduZIP dossierDestination<br />
Pour l'exécuter dans mon application Cocoa, j'ai utilisé NSTask
<br />- (BOOL)_extractZIP:(NSString*)archivePath<br />{<br /> NSTask *task = [[NSTask alloc] init];<br /><br /> [task setLaunchPath:@"/usr/bin/env"];<br /> [task setArguments:[NSArray arrayWithObjects:@"ditto", @"-x", @"-k", archivePath, [archivePath stringByDeletingLastPathComponent], nil]];<br /> <br /> [task launch];<br /> [task waitUntilExit];<br /><br /> if ([task terminationStatus] != 0) return NO;<br /><br /> return YES;<br />}<br />
Mon code marche très bien, la décompression est nickel.
J'ai cependant remarqué que lorsque je choisi de décompresser un ZIP qui contient une application, le NSTask ne se termine jamais ! Aucune erreur, la décompression s'est faite mais le task est tjrs en route...
J'ai aussi remarqué que lorsque la décompression est en cours, un dossier __MacOSX est créé. Une fois terminée, ce dossier disparaà®t et laisse place au dossier/fichier décompressé. Lorsque je décompresse une application, le dossier __MacOSX est tjrs là (puisque le task ne s'arrête jamais..), celui-ci contient l'application.. Mais l'application est aussi présente dans le dossier de destination.
Je récapitule : quand le ZIP contient une application, je me retrouve avec un task qui ne prend jamais fin + l'application décompressée + le dossier __MacOSX qui contient encore une fois l'application décompressée.
Alors je suis allé vérifier si le terminal me faisait pareil.
Et bien non ! Tapez :
<br />ditto -x -k cheminZIPApplication cheminDossierDestination"<br />
Et là vous verrez que la décompression marche impeccablement bien !!!
Est-ce que quelqu'un comprend quelque chose à ce problème ??
Merci d'avance,
Louka.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
ça quoi ? :P
Ce qui m'intéresse surtout avec "ditto" c'est la fonction "-V" qui retourne la liste des fichiers décompressés !
tu dézippe dans un dossier temporaire (mkdir) nouvellement crée et tu fais un "ls -a" dedant (ou un "ls" tout court) après avoir fait ce que tu veux avec tes fichier tu suprimme ce dossier (rm)
sinon je n'ai pas d'outils de zip-age que je connais, car je n'en ai jamais eu besoin, mais je suis sur qu'il doit en exister
ditto m'interesse surtout car il peut décompresser zip, tar, tgz, etc... (je crois que ça utilise BOMArchiveHelper non ?)
De toute façon, je ne comprend pas pourquoi le ditto -x -k ne marche pas lorsque c'est une application et que c'est exécuter via NSTask !!!
mkdir est la fonction terminal pour créer un dossier ^^
Par contre, je supose que c'est plutôt BOMArchiveHelper qui utiliserais ditto
sinon, la seule différence que je vois entre le terminal et NSTask, c'est que tu utilise le chemin complet avec NSTask. tu es sur de ton chemin (/usr/bin ?)?
Après je ne connais ça que depuis hier donc bon
Sinon, un pote qui s'y connait pas mal va me construire un ptit truc pour décompresser les fichiers que je veux, je verrai bien si ça peut remplacer ditto !
Mais n'empêche que c'est étonnant que ça ne marche pas !
L'outil en ligne de commande "zip", ça vous plait pas ? (voire même un qui a un nom très proche et encore plus explicite pour décompresser... allez... je vous laisse deviner...)
C'est dommage, pourtant il est un peu dédié à ça, mais bon...
Si je met l'appli dans un dossier et que je compresse, la décompression marchera.
Mais si je compresse l'appli directement, ça ne marche pas..
Pourtant depuis le terminal ça marche..
merci ali