utiles_v2017/_zip.h

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