Ver Mensaje Individual
  #1  
Antiguo 09-04-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
TZipFile en Builder XE3

A partir del código que hay en Clase TZipFile, para comprimir y descomprimir archivos he probado a adaptarlo para Builder. Me ha quedado esto:
Código:
TZipFile *fZip = new TZipFile();
fZip->Open(Entorno->Strings[2] + "\\CopiaZip.zip", zmWrite);

FileList->Items->Clear();
FileList->Mask = "C:\\DatAfi21\\Tablas\\*.*";

for (int nItem = 0; nItem < FileList->Items->Count; nItem ++)
     fZip->Add(Entorno->Strings[2] + "\\" + FileList->Items->Strings[nItem], FileList->Items->Strings[nItem], zcDeflate);

fZip->Close();
fZip->Free();
Quiero hacer una copia de una carpeta que tiene un total de 87 archivos (tablas Paradox e índices) como paso previo a una conversión de tablas. Empieza bien, pero cuando llega por el octavo o noveno fichero me da este error:

Nunca repite el sitio y en ningún momento cierro el fichero de destino. He probado dos variaciones de ese código:
Código:
for (int nItem = 0; nItem < FileList->Items->Count; nItem ++)
{
      fZip->Open(Entorno->Strings[2] + "\\CopiaZip.zip", zmWrite);
      fZip->Add(Entorno->Strings[2] + "\\" +  FileList->Items->Strings[nItem],  FileList->Items->Strings[nItem], zcDeflate);
      fZip->Close();
}
En este caso se ejecuta sin error, me aparece un fichero comprimido que por tamaño debería contener toda la carpeta pero si lo abro con WinRar sólo hay un fichero, el último de la carpeta.
Código:
for (int nItem = 0; nItem < FileList->Items->Count; nItem ++)
{
      fZip->Open(Entorno->Strings[2] + "\\CopiaZip.zip", zmReadWrite);
      fZip->Add(Entorno->Strings[2] + "\\" +  FileList->Items->Strings[nItem],  FileList->Items->Strings[nItem], zcDeflate);
      fZip->Close();
}
En este caso en el primer intento me da este mensaje:
Responder Con Cita