Testar término de cópia de arquivo
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
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
Curtidas 0
Respostas
Joilson_gouveia
26/02/2004
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);
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);
GOSTEI 0
Wbb
26/02/2004
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
[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
GOSTEI 0
Wbb
26/02/2004
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
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
GOSTEI 0