Comprindo E Descomprimindo Arquivos
Aqui estão reunidas algumas formas de comprimir e descomprimir arquivos
Comprimindo e descomprimindo arquivos zip em C usando a libzip
#include <zip.h> #include <cstdlib> #include <cstdio> #include <iostream> int main( int argc, char **argv ) { if( argc < 2){ std::cout << "Uso " << argv[0] << " arq.zip -> Descomprime os conteúdos do arquivo zip" << std::endl << argv[0] << " arq.zip arq1 arq2 arqn -> Comprime os arquivos dados como argumento e os coloca em arq.zip" << std::endl; exit(-1); } if( argc == 2 ){ // Descomprime o arquivo zip //Open the ZIP archive int err = 0; zip *z = zip_open(argv[1], 0, &err); int nentries = zip_get_num_entries( z, ZIP_FL_UNCHANGED ); for( int i = 0; i < nentries; i++ ){ const char *name = zip_get_name( z, i, ZIP_FL_UNCHANGED ); struct zip_stat st; zip_stat_init(&st); zip_stat(z, name, 0, &st); //Alloc memory for its uncompressed contents char *contents = new char[st.size]; //Read the compressed file zip_file *f = zip_fopen(z, name, 0); zip_fread(f, contents, st.size); zip_fclose(f); printf("Dezipando arquivo %s\n", name); FILE *arq = fopen( name, "w" ); fwrite( contents, sizeof(char), st.size, arq ); fclose(arq); delete contents; } //And close the archive zip_close(z); } else { // Comprime os arquivos em um arquivo zip int err = 0, sep = 0, zep = 0; zip *z = zip_open(argv[1], ZIP_CREATE, &err); if( !z ){ std::cout << "Error opening zip file"; } for( int i = 2; i < argc; i++ ){ FILE *arq = fopen(argv[i], "r"); zip_source *zst = zip_source_filep( z, arq, 0, -1 ); if(zst == NULL) { zip_error_get( z, &zep, &sep ); return false; } int index = (int)zip_add(z, argv[i], zst ); if(index < 0) { std::cout << "failed to add file to archive. " << zip_strerror(z) << std::endl; return false; } } zip_close(z); } }
revisão da página: 1, última edição: 23 Jun 2015 02:14





