Envoyé par : theo
Date : 06/06/2004 19:38
voici un petit exemple pour lire un fichier Zip:
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); var nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); fp.init(window, "Select a File", nsIFilePicker.modeOpenMultiple); fp.appendFilter("Bots Files","*-OS.zip"); var res=fp.show(); if (res==nsIFilePicker.returnOK) { // --- do something with the file here --- var files = fp.files; while(files.hasMoreElements()) { var thefile= files.getNext(); var zip = Components.classes["@mozilla.org/libjar/zip-reader;1"].createInstance( Components.interfaces.nsIZipReader ); zip.init(thefile); zip.open(); var it = zip.findEntries("*.txt"); //patern pour recuperer le contenu de notre zip while (it.hasMoreElements()) { var entry = it.getNext(); entry = entry.QueryInterface(Components.interfaces.nsIZipEntry); alert(entry.name); } zip.close(); } }
Envoyé par : Julien Appert
Date : 07/06/2004 09:19
Ah, c'est gentil ça, je vais justement en avoir besoin pour l'application que j'envisage de réaliser.
Envoyé par : Julien Appert
Date : 08/06/2004 10:48
Il ne me reste plus qu'à trouver comment lire ce qu'il y a à l'intérieur des fichiers du zip.
Envoyé par : laurentj
Date : 08/06/2004 16:12
Pour ce genre de message, des exemples de code source, c'est mieux de les mettre dans le wiki plutôt que dans le forum.
Envoyé par : theo
Date : 08/06/2004 22:07
Très bien c'est note, mais bon j'ai prefere le mettre dans le forum pour que chaqu'un puisse le commenter et faire ses remarques. De plus je ne suis pas tres habitué au wiki.
Sinon pour lire le contenu d'un fichier dans le zip, utilisez la fct 'getInputStream' qui vous donne un nsIInputStream facile à lire :)
Envoyé par : Julien Appert
Date : 09/06/2004 09:54
Facile à lire, facile à lire, c'est un bien grand mot :o)
A vrai dire je n'ai aucune idée de la manière de lire un InputStream. J'ai cru qu'en décortiquant ceci : http://xulfr.org/wiki/ApplisWeb/Request, j'y arriverai... Mais je dois avouer mon impuissance.
PS : je n'ai aucune formation de développeur, ceci explique sûrement cela ;o)
Envoyé par : Julien Appert
Date : 09/06/2004 10:07
Finalement, j'ai fini par trouver. Pour situer, le code suivant commence juste après alert(entry.name);
var contenu = zip.getInputStream(entry.name); var ouvert = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance( Components.interfaces.nsIScriptableInputStream ); ouvert.init(contenu); alert(ouvert.read (4096));
En fait le plus dur c'est tout de même de décrypter la doc :o)
Envoyé par : Julien Appert
Date : 09/06/2004 10:12
Par contre ce qui m'embête c'est d'être obligé de spécifier un nombre de bytes à lire. J'ai besoin de lire des fichiers XML qui peuvent être très longs.
Envoyé par : theo
Date : 09/06/2004 10:40
tu peux faire comme cela:
var contenu = zip.getInputStream(entry.name); var ouvert = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance( Components.interfaces.nsIScriptableInputStream ); ouvert.init(contenu); alert(ouvert.read (ouvert.available())); //cela te permet de lire tout le contenu du fichier d'un coup
Envoyé par : Julien Appert
Date : 09/06/2004 10:42
Ah oui en effet, suffit de compter le nombre de bytes avant... Merci beaucoup.
Envoyé par : Geceo
Date : 24/06/2005 19:22
Bonjour,
Merci Theo pour la fonction. J'aimerais juste savoir si on peut extraire tous les fichiers contenus par le fichier ZIP vers un emplacement donné (tel que le Bureau sous Windows ou le dossier personnel de l'utilisateur sous Linux). Car là (corrigez-moi si je me trompe), j'ai l'impression que ça ouvre le ZIP dans un dossier temporaire caché quelque part, mais pas à un endroit facilement accessible par l'utilisateur.
Merci, Geceo
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.