Copiando conjuntos de arquivos com animação

 

O exemplo a seguir demonstra como utilizar a função SHFileOperation para copiar um conjunto de arquivos e exibir um diálogo de progresso. Você pode também utilizar os seguintes atributos para remover, mover ou renomear um conjunto de arquivos.

 

FO_COPY

FO_DELETE

FO_MOVE

FO_RENAME

 

Nota: O buffer com os nomes dos arquivos a serem copiados deve terminar com um duplo caracter terminal null.

 

O exemplo a seguir copia três arquivos para o drive “D”.

 

uses ShellAPI;

 

procedure TForm1.Button1Click(Sender: TObject) ;

var

  Fos: TSHFileOpStruct;

  Buf: array[0..4096] of char;

  p: pchar;

  sDest: string;

begin

  FillChar(Buf, sizeof(Buf), #0) ;

  p := @buf;

  p := StrECopy(p, 'C:\FirstFile.ext1') + 1;

  p := StrECopy(p, 'C:\SecondFile.ext2') + 1;

  StrECopy(p, 'C:\ThirdFile.ext3') ;

  sDest := 'D:\';

  FillChar(Fos, sizeof(Fos), #0) ;

  with Fos do

  begin

    Wnd := Handle;

    wFunc := FO_COPY;

    pFrom := @Buf;

    pTo := PChar(sDest);

    fFlags := 0;

  end;

  if ((SHFileOperation(Fos) <> 0) or

    (Fos.fAnyOperationsAborted <> false)) then

    ShowMessage('Cancelado');

end;