Domanda

Sto lavorando su un progetto che utilizza C ++, Boost, e Qt. Capisco come comprimere i file singoli e bytestreams utilizzando, ad esempio, la funzione qCompress () in Qt.

Come faccio a comprimere un elenco di file multipli, tra cui le sottodirectory? Sto cercando una soluzione cross-platform (Mac, Win, Linux); Preferirei non a sparare una serie di nuovi processi.

C'è un modo standard per combinare bytestreams da più file in un archivio zippato, o forse v'è una funzione di convenienza o di un metodo che sarebbe disponibile nella libreria Boost iostream?

Molte grazie per l'assistenza.

Aggiorna : La libreria QuaZip sembra davvero grande. V'è un esempio nel pacchetto di download (nella dir "test") che mostra molto chiaramente come comprimere una directory di file.

Update 2 : Dopo aver completato questa operazione sul mio ambiente di sviluppo Linux, ho scoperto che QuaZip non funziona affatto con il compilatore Visual Studio. Potrebbe essere possibile per affrontare tutti quei errori di compilazione, ma una parola di cautela a chiunque cerchi su questa strada.

È stato utile?

Soluzione

Ho trovato le seguenti due librerie:

  • ZipIOS ++ . Sembra essere C "puro" ++. Essi non elencano di Windows esplicitamente come una piattaforma supportata. Quindi penso che si dovrebbe tentare la fortuna da soli.
  • QuaZIP . Sulla base di Qt4. In realtà sembra bello. Elencano di Windows in modo esplicito (usando MinGW). A quanto pare, si tratta di un wrapper C ++ per [questo] biblioteca.

Ah, e, naturalmente, ho strappato quei siti da questo domanda Qt Mailinglist su Zipping / decompressione di directory:)

Altri suggerimenti

Per la cronaca ...

Oggi, avevo bisogno di fare qualcosa di molto simile in Visual C ++. (Anche se ha voluto mantenere la possibilità di compilare il progetto su altre piattaforme,. Ma ha preferito non adottare Qt solo per questo scopo)

finito per usare il Minizip biblioteca. È scritto in C puro, ma ideare un semplice C ++ wrapper attorno era un gioco da ragazzi, e il risultato finale grandi opere, almeno per i miei scopi.

Ho cercato QuaZIP 0.4.3 su Windows con VisualStudio 2010 - ci sono ancora problemi, ma possono essere risolti facilmente

.

Per costruire con VS:

  1. Utilizza CMake per configurare e generare soluzioni VS QuaZIP.
  2. Apri soltion con VS e costruire -. Per prima cosa nota che non riesce a trovare 'zlib.h'
  3. preferenze aperte per progetto quazip e aggiungere il percorso per la copia di Qt di Zlib per C / C ++ -> Generale-> Directory di inclusione aggiuntive:. $ (QTDIR) / src / 3rdparty / zlib
  4. Ricostruzione di nuovo e si otterrà un sacco di avvertimenti e un errore C2491: dllimport problema statico sul QuaZipFile :: staticMetaObject
  5. .
  6. Questo perché QuaZipFile è dichiarato come "classe QUAZIP_EXPORT QuaZipFile" e QUAZIP_EXPORT deve risolvere per Q_DECL_EXPORT per dll e Q_DECL_IMPORT per l'applicazione, in base al fatto QUAZIP_BUILD è definita o no. Quando si costruisce QuaZIP QUAZIP_BUILD dovrebbe essere definito ma non è -. Processo di configurazione definisce errore completamente inutili "quazip_EXPORTS" invece
  7. Per risolvere, è sufficiente rimuovere "quazip_EXPORTS" da tutte le configurazioni costruire e aggiungere QUAZIP_BUILD invece - QuaZIP ora costruire bene
  8. .

Ho costruito un wrapper Minizip l'aggiunta di alcune caratteristiche che mi servivano e che lo rende più bello usarlo. È fa utilizzare l'ultima c ++ 11 ed è stato sviluppato utilizzando Visual Studio 2013, quindi dovrebbe funzionare out-of-the-box per voi.

C'è una descrizione completa qui: https://github.com/sebastiandev/zipper

è possibile comprimere intere cartelle, corsi d'acqua, vettori, ecc anche una bella caratteristica sta facendo tutto interamente in memoria.

system("zip myarchive.zip *");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top