Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con la llamada a winexec (https://www.clubdelphi.com/foros/showthread.php?t=23451)

quake2420 18-07-2005 10:33:56

Problemas con la llamada a winexec
 
Hola compañeros del foro, mi duda es la siguiente:
Estoy haciendo un programa y lo que quiero es cada vez que guardo unos datos me guardo en la carpeta donde guardo esos datos un archivo .zip.
Como lo tengo hecho ahora lo que hago primeo es copiar todos los archivos a comprimir a la carpeta donde esta el ejecutable del 7zip, una vez copiados los archivos a esa carpeta, lo que hago es ejecutar el winexec que lo que hace es cargarme un archivo .bat, el cual, lo que hace es situarme en el directorio donde esta el ejecutable del zip y luego crearme el zip, una vez que he ejecutado el winexec, ejecuto un sleep para que no tenga problemas de ejecucion.
El problema es que la primera vez que ejecuto el programa la llamada winexec no hace nada pero las restantes veces que lo ejecuto lo hace sin problema:
Las lineas que tengo en el programa son las siguientes:
Código:

       
rutaT:=directorio + '\';
//Creacion del archivo zip donde se guarda
//los archivos wpa, xml y dtd
copyfile(PChar(rutaT + 'contenido.xml'),

PChar(rutazp + 'contenido.xml'),existe);
copyfile(PChar(rutaT + 'estilo.xml'),

PChar(rutazp + 'estilo.xml'),existe);
copyfile(PChar(rutaT + 'nuevo.dtd'),

PChar(rutazp + 'nuevo.dtd'),existe);
copyfile(PChar(rutaT + nombreA + '.wpa'),

PChar(rutazp + nombreA + '.wpa'),existe);
rutazp1:='"'+rutazp+'"';
zipf:=nombreA + '.wzp';
wpaf:=nombreA+'.wpa';
diractual:=SetCurrentDir(rutazp);
winexec(Pchar('crearzip.bat ' + rutazp1 + ' ' + zipf + ' '

+ wpaf),SW_hide);
sleep(1000);
copyfile(PChar(rutazp + zipf),PChar(rutaT + '\' + zipf),existe);
deletefile(PChar(rutazp + 'contenido.xml'));
deletefile(PChar(rutazp + 'estilo.xml'));
deletefile(PChar(rutazp + 'nuevo.dtd'));
deletefile(PChar(rutazp + wpaf));
deletefile(PChar(rutazp + zipf));



Gracias a todos por adelantado

dec 18-07-2005 11:06:06

Hola,

Por favor, embebe el código Delphi dentro de las etiquetas correspondientes. El no hacerlo ha provocado que yo te plantee algo que no tiene nada que ver con la pregunta que has formulado: ¿Porqué no utilizas unos componentes como los TurboPower Abbrevia (1) para comprimir los archivos que te sean menester?

Hay más componentes para realizar esa misma tarea, empero, te digo que pruebas los susomentados porque a mí me van de miedo, lógicamente, y porque en unas cuantas líneas de código tienes tu problema resulto de una forma mucho más elegante que usando un programa "de terceros", como haces o quieres hacer ahora.

1. Estos componentes son gratuitos y de "código abierto".

Actualización: Abajo puede verse cómo comprimir en un archivo Zip los archivos de una determinada carpeta, haciendo uso de uno de los componentes incluidos en el paquete TurboPower Abbrevia:

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 var
   zip: TAbZipKit; // TurboPower Abbrevia
 begin
   zip := TAbZipKit.Create(Self);
   zip.FileName := 'C:\archivo.zip';
   zip.AddFiles('C:\archivos\*.*', faAnyFile);
   zip.Save;
   zip.Free;
 end;
Evidentemente el componente "TAbZipKit" da mucho más de sí, siendo posible fijar determinadas opciones que en el ejemplo de más arriba, sin embargo, no se ha visto necesario emplear.

delphi.com.ar 18-07-2005 14:39:51

Cita:

Empezado por quake2420
...una vez que he ejecutado el winexec, ejecuto un sleep para que no tenga problemas de ejecucion...

¿Porqué crees que el Sleep te salvará de problemas?
Leete este hilo: http://www.clubdelphi.com/foros/showthread.php?t=23424


La franja horaria es GMT +2. Ahora son las 09:28:28.

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