Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Donde encontrar componentes de compresion de archivos free
Ir a página Anterior  1, 2
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Responder citando

PERFECTO LEO, ERES UN HACHA,

Efectivamente, cambiando esa linea me mantiene los atributos como los tenia, muxas gracias por tu ayuda.

Un saludo. Very Happy
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

...bueno, mirando más a fondo los fuentes e información con respecto al formato .zip, el verdadero error esta en la línea 3732 del "unzip.cpp", donde pone:

  bool uwriteable= (a&0x08000000)!=0;

ahí debería poner:

  bool uwriteable= (a&0x00800000)!=0;

este flag se refiere al "permiso de escritura". En el "zip.cpp" esta puesto correctamente.

Si usamos esta librería tanto para comprimir como para descomprimir no tendremos problemas. Pero si usamos WinZip para comprimir y la librería esta para descomprimir hay que tener en cuenta que el WinZip por lo que se ve ignora este flag al crear los archivos, por lo que si descomprimimos un archivo del WinZip con esta librería nos pondrá el atributo de solo lectura en todos.

Si queremos que funcione indistintamente si lo comprimimos usando la librería o el WinZip debemos cambiar además la línea 3.744 del "unzip.cpp" que aparece como:

  if (!uwriteable||wreadonly) ze->attr|=FILE_ATTRIBUTE_READONLY;

por:

  if (wreadonly) ze->attr|=FILE_ATTRIBUTE_READONLY;

Espero no haberlo liado mucho y que se entienda, al menos a mi me funciona perfectamente con estos cambios.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola foro amigos el codigo de aca esta super
pero me preguntaba si se pueden compactar varios archivos a la vez con un for o while
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ifrit escribió:
hola foro amigos el codigo de aca esta super
pero me preguntaba si se pueden compactar varios archivos a la vez con un for o while

Sí. Y ´hay un código, también libre, bastante más sencillo de usar: Zip utils.

Es gratuito. Basta descomprimir el fichero y añadirlo al proyecto desde Project > Add to project. Yo uso ahora este código y para añadir más de un fichero se puede usar tranquilamente un bucle:
Código:
cZipFile = "Comprimido.zip";
HZIP Zip = CreateZip(cZipFile.c_str(), 0, ZIP_FILENAME);
for (int nItem = 0; nItem <FileListBox1>Items->Count; nItem ++)
     ZipAdd(Zip, (FileListBox1->Items->Strings[nItem]).c_str(), FileListBox1->Items->Strings[nItem]).c_str(), 0, ZIP_FILENAME);
CloseZip(Zip);

Para que te hagas una idea: Comprime un PDF de 450 Kb a unos 18 ó 20 Kb.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

muchas gracias
aca como lo deje con un opendialog

Código:
//comprimir varios
TStringList *lista = new TStringList;

String fileto,file,filezip;

if (OpenDialog1->Execute()){

   if (FileExists(OpenDialog1->FileName))
   for (int i = 0; i <OpenDialog1>Files->Count; i++) {
      lista->Add(OpenDialog1->Files->Strings[i]);

   fileto = lista->Strings[i];
   file = ChangeFileExt(lista->Strings[i],"");
   filezip = file + ".zip";

   HZIP hz;

   hz = CreateZip(filezip.t_str(), 0,ZIP_FILENAME);
   ZipAdd(hz,fileto.t_str(),fileto.t_str(),0,ZIP_FILENAME);

   CloseZip(hz);
   }

}
delete lista;


no obstante aun tengo problemas en lo siguiente
1-si elijo 5 ficheros a comprimir me los separa en 5 comprimidos y no en 5 dentro de uno.
2-cuando termino de comprimir me crea dentro del zip tantas subcarpetas como subdirectorios precedan al fichero objetico Ejemplo
c:\windows\mico\hola.txt me crea dentro del zip las carpetas windows->mico y por ultimo el hol.txt
3-aun no se como comprimir una carpeta solo he podido ficheros con extenciones
4-al comprimir con winrar, me da error al descomprimir con mi aplicacion utilizando el codigo de unzip
me preguntaba si estos problemas los tiene todos o soy solo yo , me podrian ayudar

gracias Smile
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

hola foro al menos di con una pregunta de las que formule el codigo quedaria asi para no tener c->windows->mico... un poco feo pero he resuelto, cualquier ayuda bienvenida


Código:
//comprimir varios
TStringList *lista = new TStringList;

String fileto,file,filezip;

if (OpenDialog1->Execute()){

   if (FileExists(OpenDialog1->FileName))
   for (int i = 0; i <OpenDialog1>Files->Count; i++) {
      lista->Add(OpenDialog1->Files->Strings[i]);


   fileto = lista->Strings[i];

   [b]for(int fix = 0; fix <fileto>Strings[i],"");
   filezip = file + ".zip";

   HZIP hz;

   hz = CreateZip(filezip.t_str(), 0,ZIP_FILENAME);
   ZipAdd(hz,fileto.t_str(),fileto.t_str(),0,ZIP_FILENAME);

   CloseZip(hz);

   }
}
delete lista;


mensaje editado

ahora con respecto al error de que al comprimir con winrar no puedo descomprimir
este es el codigo que utilizo

Código:
AnsiString filezip;

if (OpenDialog1->Execute())
   {
   if (FileExists(OpenDialog1->FileName))

   for (int i = 0; i <OpenDialog1>Files->Count; i++){

   filezip = OpenDialog1->Files->Strings[i];

   HZIP hz;
   hz = OpenZip(filezip.c_str(),0,ZIP_FILENAME);
   ZIPENTRY ze; GetZipItem(hz,-1,&ze);
   int numitems = ze.index;
   for (int i=0; i<numitems>ProcessMessages();
      ProgressBar1->Min = 0;
      ProgressBar1->Min = numitems;
      ProgressBar1->Position = i;
      GetZipItem(hz,i,&ze);
       UnzipItem(hz,i, ze.name,0,ZIP_FILENAME);
      }
      CloseZip(hz);
   }


  }


el error me lo da en la linea

ZIPENTRY ze; GetZipItem(hz,-1,&ze);

y dice asi en un mensaje

Access violation at address 00474f4 in module "zipping.exe" read address 0000004

alguna idea
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.