Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-01-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
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.

Código Delphi [-]
uses System.Zip;

var Zip:TZipFile;
ruta:string;


Zip := TZipFile.Create;
try
ruta:= 'C:\Users\Paul\Desktop\RESPALDO.ZIP';
Zip.Open(ruta, zmWrite);
Zip.Add('C:\Users\Paul\Desktop\Respaldos\Base.FBK');
finally
Zip.Free;
end;

Última edición por pgranados fecha: 17-01-2023 a las 20:57:43.
Responder Con Cita
  #2  
Antiguo 18-01-2023
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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:

Código Delphi [-]
var
  Zip: TZipFile;
begin
  Zip := TZipFile.Create;
  try
    Zip.Open(ExtractFilePath(ParamStr(0)) + 'My.zip', zmWrite);
    Zip.Add(ExtractFilePath(ParamStr(0)) + 'Unit1.dcu');
  finally
    Zip.Free;
  end;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 18-01-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #4  
Antiguo 18-01-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 19-01-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
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.
Hola Neftali, estoy teniendo un problema, necesito comprimir un archivo .FBK porque el modulo es para respaldar la base de datos del cliente, pero al crear el FBK con el GBAK utilizando shellExecute y quererlo comprimir en el .ZIP da un error, donde el archivo X.FBK no esta disponible o esta siendo usado por otra persona, pero si ejecuto este proceso utilizando un Stop y siguiendo cada linea con F8 no tengo problemas.

¿Sabrás que puede estar pasando?

Código Delphi [-]
ShellExecute(Handle, 'runas', PChar(psFichero), PChar(psInstruccion), nil, SW_HIDE);

  lspaso:= ERuta.Text+'\'+Enombreresp.Text+'.ZIP';
  lspaso2:=  Eruta.Text+'\'+ENombreResp.Text+'.FBK';

    Zip:= TZipFile.Create;
    try
    Zip.Open(lspaso, zmWrite);
    Zip.Add(lspaso2);
    finally
    Zip.Free;
    end;
Responder Con Cita
  #6  
Antiguo 19-01-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Talking Eureka

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.
Responder Con Cita
  #7  
Antiguo 20-01-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #8  
Antiguo 20-01-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por pgranados Ver Mensaje
... pero al crear el FBK con el GBAK utilizando shellExecute y quererlo comprimir en el .ZIP da un error, donde el archivo X.FBK no esta disponible o esta siendo usado por otra persona, pero si ejecuto este proceso utilizando un Stop y siguiendo cada linea con F8 no tengo problemas.
Sin ver completamente el código puedo imagirmar más o menos como es, aunque estaría mejor verlo para estar seguro.
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
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


La franja horaria es GMT +2. Ahora son las 01:14:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi