PDA

Ver la Versión Completa : Problemas con el ZIP Y EL UNZIP para backups


BuRtOn
23-09-2008, 05:54:59
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:


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


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 (http://tpabbrevia.sourceforge.net/), 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:\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:\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
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


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


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:


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


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