 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Manolo(er_lolo) Capt


Registrado: 28 Jul 2003Mensajes: 172Ubicación: Salamanca
|
Publicado: Lun 04 Ago, 2003 11:07 pm Asunto: |
|
|
PERFECTO LEO, ERES UN HACHA,
Efectivamente, cambiando esa linea me mantiene los atributos como los tenia, muxas gracias por tu ayuda.
Un saludo.  |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 04 Ago, 2003 11:15 pm Asunto: |
|
|
...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 |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Mie 01 Abr, 2009 9:01 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 02 Abr, 2009 7:18 am Asunto: |
|
|
| 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 |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Jue 02 Abr, 2009 11:33 pm Asunto: |
|
|
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  _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Vie 03 Abr, 2009 12:10 am Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|