2012-06-16 13 views
7

Estoy intentando utilizarComprimir una carpeta

TZipFile.ZipDirectoryContents() 

así:

TZipFile.ZipDirectoryContents('Test.PCF', WorkingDir); 

Si estoy leyendo este derecho, debe guardar el contenido de la carpeta "workingdir" en un archivo denominado Test .pcf.

Ahora cuando hago esto me sale error ::

Raised exception class EFOpenError with message Cannot open file 
...test.pcf. The process cannot access the file because its being used by another process." 

Dos cosas me confunden:

  1. Se dice que no puede abrir el archivo. No hay test.pcf todavía. Esperaba que esto lo creara.

  2. Se dice que no puede tener acceso al archivo. ¿Esto es porque todavía no está creado? ¿Estoy usando esta función wong? Si es así, ¿cómo crearía un archivo zip desde una ubicación de carpeta?

+1

Del mismo modo, no estoy familiarizado con TZipFile pero ¿podría ser que 'Test.PCF' está dentro de el directorio que está intentando cerrar? –

Respuesta

14

Probé tu código y falló de la misma forma que informaste.

Entonces creé un archivo ZIP Vaciar manualmente mediante la ejecución de WinZip.

Luego ejecutó su código y funcionó bien.

Parece que el archivo comprimido tiene que existir ya para ZipDirectoryContents para trabajar.

Para crear un archivo zip programáticamente:

myZipFile := TZIpFile.Create; 
    myZipFile.Open('c:\myfolder\newzipfile.zip', TZipMode.zmWrite); 
    myZipFile.Close; 
    myZipFile.Free; 

Esta línea funcionará a continuación:

TZipFile.ZipDirectoryContents('c:\myfolder\newzipfile.zip', WorkingDir); 
Cuestiones relacionadas