Compactar com winzip
tenho essa rotina
WinExec(PChar(´C:\\\\\\\\Arquivos de Programas\\\\\\\\WinZip\\\\\\\\WinZip32 -a -r -ex ´´
+DirDestino+´´ ´+´´´+Origem+´´´),1);
Ela compactas os arquivos pelo winzip. No windows XP funciona tanquilo, já no 98 naum esta funcionando e tambem naum da nenhum erro.
Alçguem poderia me ajudar neste misterio????
obrigado
WinExec(PChar(´C:\\\\\\\\Arquivos de Programas\\\\\\\\WinZip\\\\\\\\WinZip32 -a -r -ex ´´
+DirDestino+´´ ´+´´´+Origem+´´´),1);
Ela compactas os arquivos pelo winzip. No windows XP funciona tanquilo, já no 98 naum esta funcionando e tambem naum da nenhum erro.
Alçguem poderia me ajudar neste misterio????
obrigado
Diegocrosa
Curtidas 0
Respostas
Daemon
18/07/2005
tente o mesmo codigo com menos ´/´ ..r.s .. e com o comando[b:e8450c582e] ShellExecute[/b:e8450c582e]..
GOSTEI 0
Daemon
18/07/2005
....ahhh ....para usar o ShellExecute, você precisa declarar a Unit [b:8626521e9e]ShellApi[/b:8626521e9e]
GOSTEI 0
Eniorm
18/07/2005
Pelo que andei notando aqui nos meus pc´s (win98 e winXP) vc poderá omitir o ´c:\arquiv.....\winzip´ e passar apenas o nome do executável:
[b:90974d0389]winzip32.exe[/b:90974d0389]
Isso funciona certamente pq o path do winzip está registrado no sistema do pc. Vc pode testar isso no Iniciar/Executar e digitar: ´winzip32.exe´ e confirmar que o winzip é aberto.
[b:90974d0389]winzip32.exe[/b:90974d0389]
Isso funciona certamente pq o path do winzip está registrado no sistema do pc. Vc pode testar isso no Iniciar/Executar e digitar: ´winzip32.exe´ e confirmar que o winzip é aberto.
GOSTEI 0
Diegocrosa
18/07/2005
tente o mesmo codigo com menos ´/´ ..r.s .. e com o comando[b:1c4d4049fb] ShellExecute[/b:1c4d4049fb]..
Oi,
Obrigado por ter respondido.
Mas como fica o codigo com o ShellExecute. è que eu nunca usei esse e ele esta dando erro de parametros.
Desdeja agradeço.
GOSTEI 0
Daemon
18/07/2005
Seria:
ShellExecute(Application.Handle,[i:b5777d90e9]METODO[/i:b5777d90e9], [i:b5777d90e9]EXECUTAVEL[/i:b5777d90e9], [i:b5777d90e9]PARAMETROS [/i:b5777d90e9], [i:b5777d90e9]CAMINHO[/i:b5777d90e9], sw_Maximize);
em ´Parametros´ se não tiver nenhum, passe ´NIL´......então, no caso do winzip:
..veja se assim vc consegue. ...se não conseguir, me dá um toque...
ShellExecute(Application.Handle,[i:b5777d90e9]METODO[/i:b5777d90e9], [i:b5777d90e9]EXECUTAVEL[/i:b5777d90e9], [i:b5777d90e9]PARAMETROS [/i:b5777d90e9], [i:b5777d90e9]CAMINHO[/i:b5777d90e9], sw_Maximize);
em ´Parametros´ se não tiver nenhum, passe ´NIL´......então, no caso do winzip:
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,nil, PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);
..veja se assim vc consegue. ...se não conseguir, me dá um toque...
GOSTEI 0
Daemon
18/07/2005
...o nil é pq esse parametros da função são ponteiros, para ser mais específicos, strings terminadas em #0, no parametro [i:7891ab1efe]Caminho[/i:7891ab1efe] o Pchar serve justamente para fazer a conversão da String retornada pelo [i:7891ab1efe]ExtractFilePath[/i:7891ab1efe]... .....se ainda não ajudou, dá um toque....
..flws
..flws
GOSTEI 0
Diegocrosa
18/07/2005
...o nil é pq esse parametros da função são ponteiros, para ser mais específicos, strings terminadas em #0, no parametro [i:bd3ffc0c60]Caminho[/i:bd3ffc0c60] o Pchar serve justamente para fazer a conversão da String retornada pelo [i:bd3ffc0c60]ExtractFilePath[/i:bd3ffc0c60]... .....se ainda não ajudou, dá um toque....
..flws
Poderia dar um exemplo referente ao codigo que passei no forum ?
Para executar o winzip com os parametros, destino e origem.
Valeu!!!
GOSTEI 0
Daemon
18/07/2005
Tá ai:
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,´-a -r -ex "´+DirDestino+´" ´+´"´+Origem+´"´, PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);
GOSTEI 0
Diegocrosa
18/07/2005
Tá ai:
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,´-a -r -ex "´+DirDestino+´" ´+´"´+Origem+´"´, PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);
Coloquei o codigo acima na minha aplicação e gerou o erro:
[Error] BackupZip.pas(167): Incompatible types: ´String´ and ´PAnsiChar´
e o ponteiro fica piscando no Pchar.
As duas variaveis sao do tipo string.
ja as convertit pra Pchar e naum funcionou.
poderia me dar mais essa ajudinha?
Obrigado
GOSTEI 0
Diegocrosa
18/07/2005
Tá ai:
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,´-a -r -ex "´+DirDestino+´" ´+´"´+Origem+´"´, PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);
Oi
fiz a seguite mudança:
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,Pchar(´-a -r -ex ´´+Destino+´´ ´+´´´+Origem+´´´), PChar(pbCaminho_zip),sw_Maximize);
Copilou corretamente. Ele chama o Winzip e quando eu dou Igree e o winzip gera o seguinte erro:
Invalid fileid c:\ f:\download\copia\Fat.zip
Sendo que o que eu quero compactar esta na Origem.
Obrigado
GOSTEI 0
Marcio.theis
18/07/2005
Use o seguinte...
no caso o -min serve para que o winzip não abra a tela, vai rodar de forma minimizada.... e removi o -r, pois ele manda zipar a pasta inteira que selecionar o diretório....
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,PChar(´-min -a -ex "´ + Destino + ´" ´ + ´"´ + Origem + ´"´), PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);
no caso o -min serve para que o winzip não abra a tela, vai rodar de forma minimizada.... e removi o -r, pois ele manda zipar a pasta inteira que selecionar o diretório....
GOSTEI 0
Daemon
18/07/2005
....Diego. ...é o seguinte. ....desculpe pelo lance do String e PChar. .....acontece que os parametros são PAnsiChar. ..e quando vc concatena strings ou quando vc usa variáveis do tipo String. ..ele considera como String, sendo que ele tem que receber variáveis terminadas em caracter nulo (#0) .......o lance do erro é o seguinte. ...vc tentou usar exatamente esses parametros, exatamente dessa forma, via comando através do Dos??? Tipo:
ex:
winzip -min -a -ex f:\download\copia\Fat.zip c:\autoexec.bat
e funcionou corretamente??
ex:
winzip -min -a -ex f:\download\copia\Fat.zip c:\autoexec.bat
e funcionou corretamente??
GOSTEI 0
Diegocrosa
18/07/2005
[quote:79f4105e03=´/]/]@t´]Use o seguinte...
no caso o -min serve para que o winzip não abra a tela, vai rodar de forma minimizada.... e removi o -r, pois ele manda zipar a pasta inteira que selecionar o diretório....[/quote:79f4105e03]
Este e o codigo , conforme vc pediu para alterar.
Sendo que a variavel destino eu concateno conforme o usuario escole o ditetorio pra salvar a copia.
A ogirem e concatenada conforma o sistema que ele escole pra fazer a copia.
Mas o winzip continua dando esse erro Invalid fileid c:\ f:\download\copia\Fat.zip
Testei pelo dos e deu certo. acho que o problema esta na forma de concatenar as variaveis.
O codigo que esta em comentario esta funcionando, mas quando e Win98 ele não executa o winzip.
Se precisar ser mais claro me avise.
Valeu pela ajuda.
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,PChar(´-min -a -ex "´ + Destino + ´" ´ + ´"´ + Origem + ´"´), PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);
no caso o -min serve para que o winzip não abra a tela, vai rodar de forma minimizada.... e removi o -r, pois ele manda zipar a pasta inteira que selecionar o diretório....[/quote:79f4105e03]
Procedure TFrmCopiaZip.Copia;
Var
Cont,x,Aux,Erro : integer;
NomeArq,tipo,Comando,DirDestino,Destino,Origem,Alias,Caminho : String;
POrigem,PDestino,PArquivo : Array[0..1000] of char;
Data:String;
Begin
Cont := 0;
Screen.Cursor := crHourGlass;
DirDestino := DirList.Directory; // Ja com "\" se for unidade disquete
pbCaminho_zip := ExtractShortPathName(pbCaminho_zip);
Inc(Cont);
// Pega cada um dos Alias
For Aux := 0 to CheckListBox1.Items.count-1 do
Begin
If CheckListBox1.Checked[Aux] = False then
Continue;
Alias := UpperCase(CheckListBox1.Items.Strings[Aux]);
If not Session.IsAlias(Alias) then
Begin
MessageDlg(´Alias não encontrado: ´+Alias,mtInformation,[mbOk],0);
Continue;
End;
Caminho := FrmFuncoes.RetornaAlias(Alias); //C:\sistema\fat\db
Caminho := ExtractShortPathName(caminho);
If DirectoryExists(Caminho) then
Origem := Caminho
else
Continue;
// Avisa que vai substituir
Destino:= ´ ´+DirDestino +´\´+Alias +´.zip´;
If FileExists(Trim(Destino)) then
Begin
MessageDlg(´Arquivo de backup existente. Ele será atualizado.´,mtInformation,[mbOK],0);
End;
ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,PChar(´-min -a -ex "´ + Destino + ´" ´ + ´"´ + Origem + ´"´), PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);
{
WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32 -a -r -ex "´
+DirDestino+´\´+Alias+´" ´+´"´+Origem+´"´),1);
ShowMessage(´Arquivo "´+UpperCase(Alias)+´.ZIP" criado na pasta "´+
UpperCase(DirDestino)+´"´);
}
End;
Screen.Cursor := crDefault;
GravaDataBackup;
MessageDlg(´Fim do Backup com sucesso.´,mtInformation,[mbOk],0);
End;
Este e o codigo , conforme vc pediu para alterar.
Sendo que a variavel destino eu concateno conforme o usuario escole o ditetorio pra salvar a copia.
A ogirem e concatenada conforma o sistema que ele escole pra fazer a copia.
Mas o winzip continua dando esse erro Invalid fileid c:\ f:\download\copia\Fat.zip
Testei pelo dos e deu certo. acho que o problema esta na forma de concatenar as variaveis.
O codigo que esta em comentario esta funcionando, mas quando e Win98 ele não executa o winzip.
Se precisar ser mais claro me avise.
Valeu pela ajuda.
GOSTEI 0