Fórum Testar término de cópia de arquivo #216741

26/02/2004

0

Fala Pessoal!
Estou usando um código que copia um arquivo para o disquete, zipando-o ao mesmo tempo por meio do próprio WinZip, conforme abaixo:

[b:4701389460]Código:[/b:4701389460]
[color=blue:4701389460]begin
WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32.exe -min -a -r -ex ´´ + ´NomeArquivoDestino´ + ´´ ´ + ´´´ + ´NomeArquivoOrigem´ + ´´´), 1);
...
´outros códigos´
...
...
end;[/color:4701389460]

O problema é que antes de terminar de ser feita a cópia e compactação do arquivo para no disquete, os ´outros códigos´ são executados e um erro é gerado.

[b:4701389460]Minha pergunta é:[/b:4701389460] Como fazer com que os ´outros códigos´ sejam executados só depois que o arquivo tiver sido copiado para o disquete?

Grato
wbb


Wbb

Wbb

Responder

Posts

27/02/2004

Joilson_gouveia

Tente a dica abaixo:

411 - Executar um programa e aguardar sua finalização antes de continuar
Inclua na seção uses: Windows

{ Esta função faz isto. }

function ExecAndWait(const FileName, Params: string;
const WindowState: Word): boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
{ Coloca o nome do arquivo entre aspas. Isto é necessário devido aos espaços contidos em nomes longos }
CmdLine := ´´´ + Filename + ´´´ + Params;
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;
Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
{ Aguarda até ser finalizado }
if Result then begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
{ Libera os Handles }
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
- Exemplo de uso:

ExecAndWait(´c:\windows\notepad.exe´, ´´, SW_SHOW);


Responder

Gostei + 0

27/02/2004

Wbb

Joilson, não entendi como posso usar esta função associada à cópia do arquivo.

[b:c6d9c624b9]O problema é:[/b:c6d9c624b9] O arquivo deve ser copiado do drive C para o drive A e nada mais deve ser executado até que o arquivo tenha sido copiado por inteiro. Ou seja, se existir algum outro código depois da linha que manda executar a cópia do arquivo de um drive para outro, este ´outro código´ deverá aguardar o término da cópia do arquivo para ser então executado.

Como posso criar esse procedimento que descrevi acima utilizando sua função?

Valeu!
wbb


Responder

Gostei + 0

27/02/2004

Wbb

Não é mais necessário.

Agora consegui fazer com que a rotina funcione, fazendo a compactação do arquivo no próprio drive C e depois faço a cópia do arquivo para o disquete (drive A). Apenas após o término da cópia do arquivo é que as outras linhas da rotina serão executadas.

Antes não dava certo, pois eu tentava gravar o arquivo no disquete e compactá-lo ao mesmo tempo.

Valeu e até mais!
wbb


Responder

Gostei + 0

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

Aceitar