![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Error al crear zip y añadirle archivos.
Buen día compañeros, estoy teniendo un error al crear un zip y añadirle un archivo, no encuentro cual pueda ser el error, parece ser que el archivo.zip esta dañado, puesto a que lo quiero abrir con WinRAR y dice que el fichero esta dañado.
Última edición por pgranados fecha: 17-01-2023 a las 20:57:43. |
#2
|
||||
|
||||
Hola a todos,
Al menos en Delphi 10.4 no puedo reproducir el problema, es decir, el siguiente código funciona como se espera, y, en efecto, puedo abrir el archivo "zip" con WinRar sin problemas:
|
#3
|
||||
|
||||
En mi máquina ese código también funciona corectamente.
Compilado con Delphi 11.2 Patch 1 No uso Winrar, pero con 7Zip (a mi entender mejor que Winrar) funciona correctamente.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Gracias por su apoyo chicos, ya encontré el problema, estaba eliminando el archivo que "metía" en el .zip en el evento equivocado, "moví" la eliminación al evento OnClose y funciono de maravilla. Saludos.
|
#5
|
||||
|
||||
Cita:
¿Sabrás que puede estar pasando?
|
#6
|
||||
|
||||
![]() Por fin lo pude resolver, necesitaba usar un timer debido a que el proceso se ejecuta demasiado rápido y no da tiempo al sistema de saber si existe el archivo en el directorio.
|
#7
|
||||
|
||||
Hacer eso es muy peligroso porque cualquier ordenador un poco más rápido o más lento puede traerte problemas.
Lo que tienes que hacer es crear el zip cuando sepas que se ha creado el fichero que vas a añadir al mismo. No tenemos tu código ni sabemos qué componentes exactos usas, pero debes buscar algú envento del tipo "Terminate", "Finalize", etc... y ahí estarás seguro de que terminó de crearlo. Si usas una llamada externa entonces cámbiala por una que vuelva cuando termina, y no una que simplemente hace la llamada y regresa, dejando el proceso en funcionamiento.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
||||
|
||||
Cita:
Por lo que entiendo, lanzas 2 procesos uno detrás de otro, pero al ejecutar el segundo (ZIP), el primero todavía no ha finalizado (ShellExecute + GBAK). Para estos casos en la sección de trucos y en los foros puedes buscar referencias a ShellExecuteAndWait. Se he hablado de él muchas veces. Por decirlo así, es una función que hace lo moiismo que el ShellExecute, pero que además espera a que el proceso finalize antes de devolver el control al programa. Posíbleente esta función solucione tu problema sin necesidad de utilizar un Timer. Que tal y como dice [Casimiro] puede darte problemas en un futuro, si la velocidad de ejecución cambia o si la Base de Datos crece (por ejemplo).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Crear un listado de archivos | nickolas | Varios | 5 | 01-09-2012 12:49:23 |
Como crear Archivos EDI | Capo | Varios | 3 | 27-04-2007 23:44:55 |
Como Crear archivos | Tolón | Varios | 6 | 07-02-2007 20:38:31 |
como crear archivos de instalacion | pollo_c | Varios | 2 | 21-12-2006 10:36:43 |
crear archivos esquema *.sch | KmoCuesta | Tablas planas | 0 | 16-09-2005 21:48:05 |
![]() |
|