| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Manolo(er_lolo) Capt


Registrado: 28 Jul 2003Mensajes: 172Ubicación: Salamanca
|
Publicado: Mie 30 Jul, 2003 9:12 am Asunto: Donde encontrar componentes de compresion de archivos free |
|
|
Wenas, alguien sabe donde puedo encontrar algun componente de compresion, la idea es hacer copias de seguridad en formato comprimido, es decir, guardarlas por ejemplo en un zip, se que hay un componente llamado Zip Builder o algo parecido pero no se donde encontrarlo, si alguien sabe donde encontrar este componente o algun otro que me pueda servir agradeceria la ayuda.
Gracias a todos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Manolo(er_lolo) Capt


Registrado: 28 Jul 2003Mensajes: 172Ubicación: Salamanca
|
Publicado: Mie 30 Jul, 2003 9:47 am Asunto: |
|
|
Hola Angel :
Ya habia visto esa repuesta en el foro, me puedes ayudar un plis mas, como se instalan los componentes Zip & OGG , la verdad es q no he instalando muxos componentes, bueno, los ultimos fueron los de LMD-Tools, creo que se llaman asi, que son bastante interesantes.
Gracias de antemano, un saludo. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 30 Jul, 2003 10:48 am Asunto: |
|
|
No se trata de componentes a isntalar, como las LMD Tools. El enlace de Zipp & Ogg donde te lleva es a una web. En ella puedes descargarte un fichero (zipogg.zip) que al descomprimirlo te monta un conjunto de carpetas:
compres
ogtest
zformat
zipdrop
ziptest
Lo que hay en ellas es código puro de C++, que puedes usar llámandolo como funciones externas. Dentro de la carpeta ziptest hay un proyecto ziptest.bpr que hace todas las funciones; yo no lo he probado entero, pero hasta donde le he hecho (compilando y ejecutando) va de miedo.
De momento lo tengo aparcado porque tengo otra aplicación más urgente entre manos, pero me hace falta para mandar por correo electrónico unos ficheros de facturación de recibos por banco que pueden llegara aocupar más de 3 Mbytes.
Espero que te haya servido de algo. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Manolo(er_lolo) Capt


Registrado: 28 Jul 2003Mensajes: 172Ubicación: Salamanca
|
Publicado: Jue 31 Jul, 2003 9:36 pm Asunto: Hello Angel |
|
|
Hola Angel:
Toy un poco (ido) con el tema de la compresion, de todas formas segiure investigando su funcionamiento , pero bueno, si alguien tiene algun ejemplo o me puede ayudar me haria un peaso de favor.
Muxas gracias de antemano. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 01 Ago, 2003 7:20 am Asunto: |
|
|
Ese fichero "Zipp & Ogg" realmente lo que lleva sion fuciones que se pueden incluir en cualquier proyecto.
Ya lo sé: que lo explique, pero es que yo sólo he hecho una prueba incluyendo esas definiciones en un proyecto, que encima se me ha perdido. Buscaré este fin de semana donde demonios lo he metido. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Vie 01 Ago, 2003 10:56 am Asunto: |
|
|
Hola,
Estube mirando el codigo y a primera vista asusta. Lo volvi a mirar... y sigue asustando
Asi que me concentré en el test olvidando lo que hara detras.
Intenté hacer un ejemplo simple que solo comprima un archivo.
| Código: | #include <vcl.h>
#pragma hdrstop
#include "frmMain.h"
#include "zip.h"
//#include "unzip.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "zip.obj"
//#pragma link "unzip.obj"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hf;
HZIP hz;
// (1) create a zip file directly
hz = CreateZip("test.zip", 0,ZIP_FILENAME);
ZipAdd(hz,"file.dat", "Document de test.txt",0,ZIP_FILENAME);
CloseZip(hz);
} |
Al compilar me da los siguientes errores:
[Lieur Erreur] Unresolved external 'ZipAdd(void *, const char *, void *, unsigned int, unsigned long)' referenced from C:\PROJECTS\TEST\ZIP\FRMMAIN.OBJ
[Lieur Erreur] Unresolved external 'CloseZipZ(void *)' referenced from C:\PROJECTS\TEST\ZIP\FRMMAIN.OBJ
Agregando la unzip.h me da dos errores mas:
[Lieur Erreur] Unresolved external 'IsZipHandleU(void *)' referenced from C:\PROJECTS\TEST\ZIP\FRMMAIN.OBJ
[Lieur Erreur] Unresolved external 'CloseZipU(void *)' referenced from C:\PROJECTS\TEST\ZIP\FRMMAIN.OBJ
No se si es debido a un error al convertir el codigo a BCB 6.0.
Alguien logro hacer andar un proyecto con estas fuentes?
saludos
diego
Ultima edición por el diego el Lun 04 Ago, 2003 9:23 am, editado 1 vez |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 03 Ago, 2003 12:28 am Asunto: |
|
|
Prueba quitando la siguiente línea tanto del zip.cpp como del unzip.cpp:
#define STRICT |
|
| Volver arriba |
|
 |
Manuel H.C. Lt JG


Registrado: 20 Ago 2002Mensajes: 61Ubicación: Madrid (España)
|
Publicado: Dom 03 Ago, 2003 3:11 pm Asunto: |
|
|
Una pequeña prueba para dar ideas...
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#pragma package(smart_init)
#pragma link "zip.obj"
#pragma link "unzip.obj"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// OpenDialog1->Title = "Delete File";
if (OpenDialog1->Execute())
{
if (FileExists(OpenDialog1->FileName))
fileto=OpenDialog1->FileName;
file= ChangeFileExt(OpenDialog1->FileName,"");
filezip=file + ".zip";
}
HZIP hz;
// Crea el fichero zip
hz = CreateZip(filezip.c_str(), 0,ZIP_FILENAME);
ZipAdd(hz,fileto.c_str(),fileto.c_str(),0,ZIP_FILENAME);
CloseZip(hz);
}
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include "unzip.h"
#include "zip.h"
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <ExtDlgs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
AnsiString file;
AnsiString filezip;
AnsiString fileto;
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Un saludo y que sirva para sacar nuevas conclusiones. |
|
| Volver arriba |
|
 |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Lun 04 Ago, 2003 9:42 am Asunto: |
|
|
Leo:
Sin el #define STRICT funciona a la perfeccion. Para que sirve esa linea?
Manuel:
El ejemplo esta bien pero encuentro un problema que no comprendo. El problema se produce en la linea del ZippAdd:
ZipAdd(hz,fileto.c_str(),fileto.c_str(),0,ZIP_FILENAME);
El archivo lo comprime y el tamaño del .zip es correcto (o sea, que deberia tener algo dentro). Pero al abrirlo no veo nada. Con mi ejemplo anda bien. Probé agregando una segunda variable para diferenciar el nombre el archivo a agregar en el zip y el nombre con el que sera guardado pero nada cambia:
ZipAdd(hz,fileto2.c_str(),fileto.c_str(),0,ZIP_FILENAME);
Nota: Intente abrirlo con el winrar y en lugar de ver un archivo se ve una carpeta "\"
saludos |
|
| Volver arriba |
|
 |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Lun 04 Ago, 2003 10:55 am Asunto: |
|
|
Bueno. Continué haciendo algunas pruebas y comprobé, felizmente, que a pesar de que el archivo comprimido no es visible al abrirlo (con alguna aplicacion), al descomprimirlo (por codigo) funciona bien:
| Código: | void __fastcall TForm1::bt_UnZipClick(TObject *Sender)
{
HZIP hz;
AnsiString filezip;
if (OpenDialog1->Execute())
{
if (FileExists(OpenDialog1->FileName))
Screen->Cursor = crHourGlass;
filezip = OpenDialog1->FileName;
hz = OpenZip(filezip.c_str(),0,ZIP_FILENAME);
ZIPENTRY ze; GetZipItem(hz,-1,&ze); int numitems=ze.index;
for (int i=0; i<numitems; i++)
{ GetZipItem(hz,i,&ze);
UnzipItem(hz,i, ze.name,0,ZIP_FILENAME);
}
CloseZip(hz);
Screen->Cursor = crDefault;
}
} |
Es decir. El archivo comprimido en el interior del test.zip no es visible desde el winrar o el visor de .zip del XP, pero este esta almacenado (eso lo sospechaba al ver el tamaño del .zip), y al descomrpimirlo utilizando el codigo el archivo nos vuelve sano y salvo.
El unico problema es que si erchivo comprimido es para distribuirlo continuaria el problema de que expliqué en el mensaje anterior.
saludos
diego |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 04 Ago, 2003 2:26 pm Asunto: |
|
|
| Cita: | | Sin el #define STRICT funciona a la perfeccion. Para que sirve esa linea? |
Cambia la forma en que se declaran algunos tipos de Windows para asegurar que no pasas un tipo cuando se espera otro.
El problema es que en C++ si mezclas módulos donde usas STRICT con otros donde no lo usas no funcionará correctamente.
Así que otra forma de solucionar el problema podría ser, en vez de quitar la línea "#define STRICT" de "unzip.cpp" y "zip.cpp" ponerla también antes de la cabecera "vcl.h".
| Cita: | | El archivo lo comprime y el tamaño del .zip es correcto (o sea, que deberia tener algo dentro). Pero al abrirlo no veo nada. |
A mi se me ve correctamente tanto usando el visor ZIP del Windows XP, como con el WinZip, el WinAce y el WinRar.
Más información:
Using STRICT... |
|
| Volver arriba |
|
 |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Lun 04 Ago, 2003 4:12 pm Asunto: |
|
|
Leo, es rarisimo. Instalé el Winzip (v8.1) para probar y lo veo perfectamente. Con el winRar (v3.1) y el visualizador de XP no.
Gracias por la info..
saludos |
|
| Volver arriba |
|
 |
Manolo(er_lolo) Capt


Registrado: 28 Jul 2003Mensajes: 172Ubicación: Salamanca
|
Publicado: Lun 04 Ago, 2003 7:59 pm Asunto: ¡¡¡ FUNCIONA !!! |
|
|
Wenas a todos,
Funciona perfectamente, tanto a la hora de comprimir como al descomprimir, el unico pero que me he encontrado es que al descomprimir me lo hace con el atributo de solo lectura en los ficheros, el codigo parte es el de "el Diego", ¿alguien sabe como hay que ponerlo para que no los descomprima como solo lectura?
Un saludo a todos y gracias de antemano. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 04 Ago, 2003 9:48 pm Asunto: |
|
|
| Cita: | | ...el unico pero que me he encontrado es que al descomprimir me lo hace con el atributo de solo lectura en los ficheros... |
Creo que hay un error en la línea 3.744 del "unzip.cpp", al menos a mi al modificarla me funciona todo correctamente. O sea, he modificado lo siguiente:
if (!uwriteable||wreadonly) ze->attr|=FILE_ATTRIBUTE_READONLY;
por:
if (!uwriteable && wreadonly) ze->attr|=FILE_ATTRIBUTE_READONLY;
Para probarlo podéis crear un .ZIP donde mezcléis archivos con el atributo de solo lectura y sin el, veréis como al descomprimirlo pone los atributos como estaban originalmente al comprimir. |
|
| Volver arriba |
|
 |
|