Utiliser un bundle zippé comme document de votre application ?

Salut la compagnie,



Toujours en train de jouer avec Newsstand je me demandais une chose. Les application comme Office (depuis les docx) ou iWork (depuis 09) utilise des bundle zippé comme format de document.



Inutile d'expliquer en quoi le contexte est intéressant, on garde une structure logique sous forme de dossier dans un fichier unique standardisé, bref, c'est une bonne idée.



Par contre ce que je ne sais pas c'est coté développeur, comment on gère ça ? Existe-t-il une classe wrapper de ce genre de document ? Capable d'aller agir directement dans le ZIP pour manipuler les données sans qu'on ai besoin nous même de gérer la compression / décompression des données ?

Réponses

  • Perso j'utilise des bundles mais je ne les zip pas donc je ne saurai te dire comment ils font. Ca peut-être lourd de dé-ziper non ?
  • J'ai regardé un peu ce que fait Pages (avec lsof et fs_usage), il crée tout un tas de fichiers temporaires dans /private/var/folders/ à  chaque fois que j'ouvre un document. Je suppose donc que chez Apple ils se cassent pas la tête, ils décompressent le zip dans un dossier temporaire, bossent dessus, et recompressent quand l'utilisateur sauve le document...
  • 'zoc' a écrit:


    J'ai regardé un peu ce que fait Pages (avec lsof et fs_usage), il crée tout un tas de fichiers temporaires dans /private/var/folders/ à  chaque fois que j'ouvre un document. Je suppose donc que chez Apple ils se cassent pas la tête, ils décompressent le zip dans un dossier temporaire, bossent dessus, et recompressent quand l'utilisateur sauve le document...




    Pages fait de l'édition de document avec sauvegarde atomique, en un sens c'est logique comme action. Il serait intéressant de voir comment agit QuickLook (sur un docx par exemple, qui, il me semble, ne contiens pas de PDF d'aperçu).
  • En tout cas, tu n'es pas le premier à  te poser la question, et manifestement il n'y a pas de solution "toute faite" dans le SDK : http://stackoverflow.com/questions/1741070/use-zip-archives-to-store-nsdocument-data
  • Bon, c'est rassurant de ne pas être seul, dommage qu'il n'y ait rien de déjà  fait par contre. Cela étant, plus j'y pense et plus décompresser à  la volé depuis le ZIP n'est intéressant que dans certains cas (gros document en lecture seule avec prédiction sans doute possible des pages à  venir).
  • Pour gérer du côté dev c'est pas très complexe en soit, juste relou à  coder (Je l'ai fait...)



    - Tu unzip ton fichier xlsx dans une destination temporaire (lib : ZipArchive)

    - Tu modifies les fichiers qui t'intéressent.

    - Tu re-zip le tout



    Et voilà  c'est fini.



    La dernière fois que j'ai cherché sur le net je n'ai trouvé aucun wrapper, donc j'ai dev le mien.
  • 'Nyx0uf' a écrit:


    Pour gérer du côté dev c'est pas très complexe en soit, juste relou à  coder (Je l'ai fait...)



    - Tu unzip ton fichier xlsx dans une destination temporaire (lib : ZipArchive)

    - Tu modifies les fichiers qui t'intéressent.

    - Tu re-zip le tout



    Et voilà  c'est fini.



    La dernière fois que j'ai cherché sur le net je n'ai trouvé aucun wrapper, donc j'ai dev le mien.




    ça c'est la partie simple en effet. Je pensais plus à  quelque chose qui écris et lis directement dans l'archive. Cela étant comme je l'ai dit plus haut, ce n'est intéressant que dans certains cas du à  la phase de compression / décompression.



    Par contre cela pourrait être plus intéressant dans le cas d'un tar qui lui ne gère pas de compression mais uniquement de l'archivage. Cela permettrait d'avoir une application avec des fichiers de type bundle tout en restant sur un fichier plat sur le disque. On évite d'utiliser deux fois trop d'espace disque, de perdre du temps en compression / décompression et on garde une structure de fichier inaltérable même si c'est passé par des OS qui ne gère pas les bundle comme le Mac.
  • L'idéal serait d'avoir une sorte de NSZipFileWrapper, enfin plutôt un truc équivalent à  NSFileWrapper qui pourrait être utilisé de manière transparente en lieu et place de NSFileWrapper.



    Cette petite idée me trotte dans la tête depuis que tu as ouvert ce fil, il me manque juste le courage pour m'y mettre réellement image/rolleyes.gif' class='bbc_emoticon' alt='::)' />
  • 'zoc' a écrit:


    L'idéal serait d'avoir une sorte de NSZipFileWrapper, enfin plutôt un truc équivalent à  NSFileWrapper qui pourrait être utilisé de manière transparente en lieu et place de NSFileWrapper.



    Cette petite idée me trotte dans la tête depuis que tu as ouvert ce fil, il me manque juste le courage pour m'y mettre réellement image/rolleyes.gif' class='bbc_emoticon' alt='::)' />




    Si tu te lance dans quelque chose, met le sur git hub que je te donne un coup de main, et tant qu'à  faire il faudrait faire quelque chose de configurable au niveau des algo employé (genre zip ou tar + [rien|bzip2|gunzip]) histoire que ça serve dans plusieurs cas.
  • 'zoc' a écrit:


    L'idéal serait d'avoir une sorte de NSZipFileWrapper, enfin plutôt un truc équivalent à  NSFileWrapper qui pourrait être utilisé de manière transparente en lieu et place de NSFileWrapper.



    Cette petite idée me trotte dans la tête depuis que tu as ouvert ce fil, il me manque juste le courage pour m'y mettre réellement image/rolleyes.gif' class='bbc_emoticon' alt='::)' />




    En partant de http://code.google.com/p/ziparchive/ y en a pas pour longtemps.
Connectez-vous ou Inscrivez-vous pour répondre.