2012-03-28 19 views
5

Ho una lista di file zip e rar in una cartella locale.
Tutto quello che devo fare è estrarre il contenuto dello zip e dei file rar e salvarli in una cartella con lo stesso nome del rispettivo file di archivio.
Dato che sono nuovo su as3, non ne ho idea.
C'è qualche libreria per questo ???




Grazie in anticipo ...Decomprimere e salvare i file usando as3?

+1

Non è possibile eseguire operazioni sui file locali senza utilizzare AIR o qualcosa del genere. Se stai sviluppando un'applicazione locale, il mio consiglio è di scrivere quelle parti con un linguaggio più potente come C++. Ma c'è anche qualcosa di simile a questo http://codeazur.com.br/lab/fzip/ – HeyYO

risposta

6

Ci sono alcune librerie là fuori che fare con i file ZIP in AS3, ma attenzione che questo non è un compito facile per un principiante in ActionScript 3.

  • sembra essere il più utilizzato, ma richiede che gli archivi ZIP abbiano checksum Adler32. Fornito con la libreria c'è uno script Python che inietta il checksum in file ZIP per pre-processare i file prima di decomprimerli.

  • As3 port of JZlib, una libreria as3 da utilizzare con Fzip anziché lo script Python di cui sopra.

  • AS3 Zip Library (l'autore afferma che è più lento di FZip) che evita il problema Addler32 checksum.

  • Su Adobe Air, è possibile dare un'occhiata a una spiegazione dettagliata e un esempio di lavoro in this article on the adobe website.

Spero che questo aiuti!

+2

Per la cronaca, dal momento che Flash Player 10 (cioè, molto tempo fa) FZip * non * richiede più l'iniezione di checksum. Funziona e basta. –

10

Per decomprimere i file zip, è possibile utilizzare AS3Commons Zip (precedentemente noto come FZip). Funziona senza il requisito di checksum Adler32 menzionato in una risposta precedente.

Ecco un esempio di come estrarre tutti i file in un archivio zip. La funzione qui sotto sarebbe chiamato quando un oggetto URLLoader ha scaricato il file zip e spedito un Event.COMPLETE evento:

import org.as3commons.zip.Zip; 
import org.as3commons.zip.ZipFile; 

private function _onZipDownloaded(e:Event):void { 

    var ba:ByteArray = ByteArray(e.target.data); 
    var zip:Zip = new Zip(); 
    zip.loadBytes(ba); 

    for(var i:uint = 0; i < zip.getFileCount(); i++) { 

     var zipFile:ZipFile = zip.getFileAt(i); 
     var extracted:File = directory.resolvePath(zipFile.filename); 

     var fs:FileStream = new FileStream(); 
     fs.open(extracted, FileMode.WRITE); 
     fs.writeBytes(zipFile.content); 
     fs.close(); 

    } 

} 

Ovviamente, il controllo degli errori dovrebbe essere aggiunto al codice di cui sopra, ma si ottiene l'idea ...

+4

Questa dovrebbe essere la risposta accettata. –