GARANTIR DESCONTO

Fórum Compactar com winzip #288502

18/07/2005

0

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


Diegocrosa

Diegocrosa

Responder

Posts

18/07/2005

Daemon

tente o mesmo codigo com menos ´/´ ..r.s .. e com o comando[b:e8450c582e] ShellExecute[/b:e8450c582e]..


Responder

Gostei + 0

18/07/2005

Daemon

....ahhh ....para usar o ShellExecute, você precisa declarar a Unit [b:8626521e9e]ShellApi[/b:8626521e9e]


Responder

Gostei + 0

18/07/2005

Eniorm

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.


Responder

Gostei + 0

19/07/2005

Diegocrosa

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.


Responder

Gostei + 0

19/07/2005

Daemon

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:

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...


Responder

Gostei + 0

19/07/2005

Daemon

...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


Responder

Gostei + 0

19/07/2005

Diegocrosa

...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!!!


Responder

Gostei + 0

19/07/2005

Daemon

Tá ai:

ShellExecute(Application.Handle,´OPEN´, ´winzip32.exe´,´-a -r -ex "´+DirDestino+´" ´+´"´+Origem+´"´, PChar(ExtractFilePath(´winzip32.exe´)),sw_Maximize);



Responder

Gostei + 0

20/07/2005

Diegocrosa

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


Responder

Gostei + 0

20/07/2005

Diegocrosa

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


Responder

Gostei + 0

21/07/2005

Marcio.theis

Use o seguinte...

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....


Responder

Gostei + 0

21/07/2005

Daemon

....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??


Responder

Gostei + 0

21/07/2005

Diegocrosa

[quote:79f4105e03=´/]/]@t´]Use o seguinte...

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar