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 el ZIP Y EL UNZIP para backups (https://www.clubdelphi.com/foros/showthread.php?t=60161)

BuRtOn 23-09-2008 05:54:59

Problemas con el ZIP Y EL UNZIP para backups
 
Saludos amigos, lo que sucede es que tengo este codigo, y no me funciona, antes si, no se que le movio mi amigo y no me comprimie el backup de mi bd...utilizo el unzip.exe y zip.exe, este es el codigo que tengo:

Ojo: la ubicación de mi aplicacion es la siguiente:

C:\Archivos de programa\Giros

dentro de Giros esta la carpeta de Backup fotosclientes y Backupbd, se que antes me generaba el mismo error y se que es por un espacio, pero no recuerdo en que parte va.

Boton de Comprimir:

Código Delphi [-]
procedure TfrmBackup.ComprimirClick(Sender: TObject);
begin
FileRun1.Directory:=ExtractFilePath(Application.ExeName);
FileRun1.FileName:='zip.exe';
FileRun1.Parameters:=ExtractFilePath(Application.ExeName)+
 'Backupbd\'+Edit1.Text+'.zip '+ExtractFilePath(Application.ExeName)+'bd\*.*';
FileRun1.Execute;
end;

Boton descomprimir

Código Delphi [-]
procedure TfrmBackup.DescomprimirClick(Sender: TObject);
begin
opdAbrir.InitialDir := ExtractFilePath(Application.ExeName)+'Backupbd';
if (opdAbrir.Execute)then
begin
FileRun1.Directory := ExtractFilePath(Application.ExeName);
FileRun1.FileName := 'unzip.exe';
FileRun1.Parameters := opdAbrir.FileName+' -d C:\';
FileRun1.Execute;

si alguien sabe el error por favor espero colaboración.----Gracias por su tiempo prestado.

dec 23-09-2008 06:09:03

Hola,

No te doy una respuesta, pero, yo de ti echaría un vistazo a los componentes TurboPower Abbrevia, puesto que te permiten comprimir y descomprimir archivos (también en formato Zip) de una forma bastante sencilla y sin depender de ningún programa externo. :rolleyes:

roman 23-09-2008 06:11:21

No podemos asegurar mucho sin saber qué es y qué hace FileRun1, pero por lo que dices del espacio, es posible que el problema esté en FileRun1.Parameters. Fíjate que el valor que le pasas es:

Código:

C:\Archivos de programa\Giros\Backupbd\noseque.zip C:\Archivos de programa\Giros\bd\*.*
Si esto es algo que se traduce en la llamada a un ejecutable externo, tal como zip.exe, y sus parámetros, nota que los espacios que existen en Archivos de programa, provocan que los parámetros sean
  • C:\Archivos
  • de
  • programa\Giros\Backupbd\noseque.zip
  • C:\Archivos
  • de
  • programa\Giros\bd\*.*

en lugar de los dos que esperarías:
  • C:\Archivos de programa\Giros\Backupbd\noseque.zip
  • C:\Archivos de programa\Giros\bd\*.*

Si tal es la situación entonces tendrías que encerrar cada parámetro entre comillas " para que la llamada al ejecutable quede así:

Código:

"C:\Archivos de programa\Giros\Backupbd\noseque.zip" "C:\Archivos de programa\Giros\bd\*.*"
// Saludos

BuRtOn 23-09-2008 06:11:30

Hola dec, si se que existen componentes mas sencillos, pero el hecho es que ya me habia funcionado todo, y no se que sibalos le borro mi amigo o que le hizo y no me funciona, y es una aplicación comercial, y nos toca entregarla hoy a las 6:30 am, entiendes, asi que no se otro metodo ni utilizar componentes para hacer el backuo, asi que me toca rectificar y encontrar el error...Gracias

BuRtOn 23-09-2008 06:16:42

Saludos Roman, no se que tan viable sea escribir el parametro entre ", ya que me generaria error.Gracias por tu respuesta.

roman 23-09-2008 06:19:14

Es la forma en que funciona Windows, así que es bastante viable. Prueba a hacerlo manualmente y verás como las " no sólo son deseables sino imperativas.
Pero, como dije antes, depende de lo que haga exactamente FileRun1.

// Saludos

roman 23-09-2008 06:22:21

Código Delphi [-]
FileRun1.Parameters :=
  '"' + ExtractFilePath(Application.ExeName) + 'Backupbd\' + Edit1.Text + '.zip" "' +
  ExtractFilePath(Application.ExeName) + 'bd\*.*"';

// Saludos

BuRtOn 23-09-2008 06:31:07

Diosssssssssss esto me esta matandooo haaaa :mad: mi amigo es un destructor, no roman no me salio....mira como tengo el codigo:


Botón Comprimir

Código Delphi [-]
procedure TfrmBackup.ComprimirClick(Sender: TObject);
begin
FileRun1.Directory:=ExtractFilePath(Application.ExeName);
FileRun1.FileName:='zip.exe';
FileRun1.Parameters:='"' + ExtractFilePath(Application.ExeName) + 
 'Backupbd\' + Edit1.Text+'.zip" "' + ExtractFilePath(Application.ExeName) + 'bd\*.*"';
FileRun1.Execute;
end;


Botón descomprimir

Código Delphi [-]
procedure TfrmBackup.DescomprimirClick(Sender: TObject);
begin
opdAbrir.InitialDir := ExtractFilePath(Application.ExeName)+'Backupbd';
if (opdAbrir.Execute)then
begin
FileRun1.Directory := ExtractFilePath(Application.ExeName);
FileRun1.FileName := 'unzip.exe';
FileRun1.Parameters := opdAbrir.FileName+' -d C:\';
FileRun1.Execute;

end;
end;


y aun no asi me sale, pero en cuanto al FileRun1, esta perfecto por que no lo movieron para nada, se que es codigo, y es la parte de comprimir...por que no me comprime ahora...haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:mad::(:confused:

dec 23-09-2008 06:34:38

Hola,

De todas formas, ¿no te retorna "FileRun" ningún error ni nada? Es que en otro momento, si llega a "fallar" por otro motivo... no sé, se me hace raro. Deberías poder obtener algún tipo de error o excepción, ¿no?

BuRtOn 23-09-2008 06:36:51

No dec, nada no me envia ningun mensaje de error ni de excepción.....y lo peor de todo es que me funcionaba....Haaaaa que piedraa brother...ya casi es la 1 y aqui arreglando esto pa llevarlo a las 6:30 am....de hoy...juasss...

dec 23-09-2008 06:49:40

Hola,

Se me hace complicado ayudarte... creo que debe ser algo "tonto", pero, que, se nos pasa por alto. Pero tú estás a los mandos, por decirlo de algún modo. :) ¿Comprobaste que no hay procesos de los programas "zip" y "unzip" corriendo? Es posible que eso impida un buen funcionamiento de los mismos. En cualquier caso, insisto con los TurboPower Abbrevia: creo que ya habráis terminado (hay ejemplos de uso muy sencillos) y creo también que son una solución más elegante. Pero es mi opinión.

PD. Por si te sirve de algo aquí son las 7:53 de la mañana. Tienes suerte de estar allí. :D :D

roman 23-09-2008 06:52:19

Casualmente tengo aquí un zip.exe y he hecho esta prueba:

Código Delphi [-]
uses ShellApi;

function DQuotedString(S: String): String;
begin
  Result := '"' + S + '"';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Parameters: String;

begin
  Parameters :=
    DQuotedString('c:\Documents and Settings\roman\Mis documentos\noseque.zip') +
    ' ' +
    DQuotedString('C:\Documents and Settings\roman\Mis documentos\Trabajo\cdsview\*.*');

  ShowMessage(Parameters);
  ShellExecute(Handle, 'open', 'zip.exe', PChar(Parameters), nil, SW_SHOW);
end;

que funciona bien. Es decir, lo mismo que te digo con las comillas dobles pero más ordenado y usando ShellExecute.

Puedes intentar cambiando FileRun por ShellExecute. Antes puedes probar poner entre comillas dobles tambien a FileRun1.Directory, pues también tiene espacios.

¿De dónde sale FileRun? ¿Es un componente hecho por ustedes?

// Saludos

BuRtOn 23-09-2008 06:58:40

Es un action list, ---> Standard Action clases ---> File ----> TFileRun, es de delphi y no es ningun componente...

roman 23-09-2008 06:59:03

¡¡Ya sé qué es FileRun!! Es una acción. He hecho esta prueba

Código Delphi [-]
FileRun1.Directory := Application.ExeName;
FileRun1.FileName := 'zip.exe';
FileRun1.Parameters :=
  DQuotedString('c:\Documents and Settings\roman\Mis documentos\noseque.zip') +
  ' ' +
  DQuotedString('C:\Documents and Settings\roman\Mis documentos\Trabajo\cdsview\*.*');
FileRun1.Execute;

y funciona bien.

// Saludos

Lepe 23-09-2008 16:45:20

a ver si no recuerdo mal, teniendo windows XP instalado:

- con particiones FAT, necesita entrecomillar los parámetros
- con particiones NTFS, no es necesario entrecomillar los parámetros

No puedo asegurarlo al 100 %, porque no tengo FAT por aquí. Para curarte en salud, entrecomilla (comillas dobles) los parámetros y siempre funcionará.

... a estas horas ya habrá entregado el programa, pero los "service packs" están para algo ;).


Saludos

roman 23-09-2008 16:58:14

No lo creo Lepe. Parámetros son parámetros, y se separan con espacios. FAT o NTFS, es imposible que un programa distinga que si le mandas C:\Archivos de programa\hola en la línea de comandos, en realidad te refieres a un sólo parámetro y no a tres.

Y bueno, de hecho ayer mismo estuve probando esto, tanto en FileRun como en ShellExecute (con NTFS) y no funciona si se omiten las comillas dobles. Y, de hecho, examiné el código de FileRun y vi que usa ShellExecute. Claro que esto último ya no lo comenté porque nuestro amigo se desapareció.

// Saludos


La franja horaria es GMT +2. Ahora son las 19:49: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