NSTask / Terminal

03:47 modifié dans API AppKit #1
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é :
<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:@&quot;/usr/bin/env&quot;];<br />	[task setArguments:[NSArray arrayWithObjects:@&quot;ditto&quot;, @&quot;-x&quot;, @&quot;-k&quot;, 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&quot;<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.

Réponses

  • elfelf Membre
    03:47 modifié #2
    je supose qu'il doit exister d'autres outils pour dézipper, tu peux essayer avec ça...
  • 03:47 modifié #3
    dans 1158506489:

    je supose qu'il doit exister d'autres outils pour dézipper, tu peux essayer avec ça...


    ç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 !
  • elfelf Membre
    03:47 modifié #4
    tu peux aussi le faire autrement aussi

    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
  • 03:47 modifié #5
    mkdir crée un nouveau dossier ? ou c'est une fonction de dézippage ?
    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 !!!
  • elfelf Membre
    03:47 modifié #6
    Désolé je ne peut pas t'aider, car je n'y connais rien en ditto lui même

    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 ?)?
  • 03:47 modifié #7
    Ben le code que j'ai trouvé appelle la fonction "hdiutil" avec NSTask et l'exécutable /usr/bin/env
    Après je ne connais ça que depuis hier donc bon  :o
    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 !
  • elfelf Membre
    03:47 modifié #8
    par contre je m'y connais en hdiutil (tout Exces est basé dessus) et c'est uniquement pour les images disques, et pas pour les archives zip, tar, gz etc.
  • AliGatorAliGator Membre, Modérateur
    septembre 2006 modifié #9
    Dites les gars, ça vous arrive de chercher un peu, de lire les manuels, etc ?

    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 compresser... allez... je vous laisse deviner...)
    C'est dommage, pourtant il est un peu dédié à  ça, mais bon...
  • 03:47 modifié #10
    merci ali, ça marche nickel  :crackboom:-
  • 03:47 modifié #11
    Haha petite édition,
    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..
  • 03:47 modifié #12
    Le problème vient de mon NSPipe,
    merci ali  <3
Connectez-vous ou Inscrivez-vous pour répondre.