83 lines
2.8 KiB
C++
83 lines
2.8 KiB
C++
#pragma once
|
|
#define USEWIN32IOAPI
|
|
|
|
/*
|
|
#ifndef _WIN32
|
|
#ifndef __USE_FILE_OFFSET64
|
|
#define __USE_FILE_OFFSET64
|
|
#endif
|
|
#ifndef __USE_LARGEFILE64
|
|
#define __USE_LARGEFILE64
|
|
#endif
|
|
#ifndef _LARGEFILE64_SOURCE
|
|
#define _LARGEFILE64_SOURCE
|
|
#endif
|
|
#ifndef _FILE_OFFSET_BIT
|
|
#define _FILE_OFFSET_BIT 64
|
|
#endif
|
|
#endif
|
|
*/
|
|
#include "zconf.h"
|
|
#include "zip.h"
|
|
#include "unzip.h"
|
|
#ifdef _WIN32
|
|
#define USEWIN32IOAPI
|
|
#include "iowin32.h"
|
|
#endif
|
|
#define WRITEBUFFERSIZE (8192)
|
|
#define MAXFILENAME (256)
|
|
#define CASESENSITIVITY (0)
|
|
|
|
typedef struct Zip_struct
|
|
{
|
|
char nombre[256];
|
|
int size;
|
|
int size_descom;
|
|
int ratio;
|
|
int compresion;
|
|
BOOL encript;
|
|
}Zip_struct;
|
|
class Cigt_error;
|
|
class C_zip
|
|
{
|
|
public:
|
|
enum
|
|
{
|
|
READ,
|
|
WRITE,
|
|
OWERWRITE
|
|
};
|
|
Cigt_error *igt_err;
|
|
char nombre_zip[256];
|
|
zipFile *zf;
|
|
unzFile *uf;
|
|
Cigt_zip(void);
|
|
Cigt_zip(Cigt_error *err);
|
|
~Cigt_zip(void);
|
|
BOOL borrar_error;
|
|
|
|
int nivel_compresion;//nivel de compresion
|
|
BOOL abre_zip(char *filename,int parametro);//abre zip y deja el handle en zf
|
|
BOOL addfile(char *newfile,char *dir_in_zip);//introduce el archivo newfile con dir dentro del zip dir_in_zip
|
|
BOOL descomprimir2file(char *file,char *fileout);//descomprime el archivo file y lo pone en archivo fileout
|
|
BOOL descomprimir2file(char *file);//Descomprime el archivo file y lo pone en la ruta relativa del zip
|
|
BOOL descomprimir2buff(char *file,BYTE **buf,int *nb );//Descomprime el archivo file y lo carga en buf
|
|
BOOL descomprimir();//Descomprime el zip entero y lo pone en la ruta relativa del zip;
|
|
Zip_struct* listar(int* n);//devuelve una estructura con informacion del contenido del zip,sinedo n el numero de archivos en el zip
|
|
BOOL cierra_zip();//Cierra handle
|
|
BOOL abre_zip_temp();//Crea un archivo vacio en la carpeta temporal de windows (el Path del archivo se puede obtener de la variable nombre_zip)
|
|
private:
|
|
BOOL crea_dir(char *dir);
|
|
BOOL descomprimir(char *file,char *fileout,BYTE **bufex,int *n);//descomprime del archivo filezip el archivo file y lo pone en dirout o en el bufex si dirout==NULL
|
|
BOOL cierra_zip_zf();//cierra el handle escritura
|
|
BOOL cierra_zip_uf();//cierra handle lectura
|
|
//funciones auxiliares
|
|
int isLargeFile(char* filename);
|
|
int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc);
|
|
int filetime(char *f, tm_zip *tmzip, long *dt_);
|
|
void change_file_date(const char *filename,uLong dosdate,tm_unz tmu_date);
|
|
};
|
|
BOOL lista_file_dir(char *dir,Cstr_array *lista_file,Cigt_error *err);//Lista todos los archivos que contiene la carpeta dir
|
|
BOOL lista_file_dir(char *dir,char *omite, Cstr_array *lista_file,Cigt_error *err);//Lista todos los archivos que contiene la carpeta dir omitiendo "omite"
|
|
BOOL es_dir(char *dir);//Comprueba si dir es una carpeta
|
|
BOOL del_File(char *file,Cigt_error *err);//Borra todos los archivos que contiene la carpeta dir
|