Patrocínio Natura

Copiando arquivos entre Pastas com Delphi no Windows 7

17 de dezembro de 2012

Há tempos eu utilizava em meus sistemas uma rotina para cópia entre pastas que funcionava muito bem, veja:

function JCopiarq(PathOrigem: String; ArqOrigem: String ; PathDestino: String ; Manter: Boolean):boolean;
var
SR: TSearchRec;
I: integer;
Origem, Destino: String;
begin
I := FindFirst(PathOrigem+ArqOrigem,faAnyFile, SR);
while I = 0 do begin
if (SR.Attr and faDirectory) <> faDirectory then begin
Origem := PathOrigem + SR.Name;
Destino := PathDestino + SR.Name;
if not CopyFile(PChar(Origem), PChar(Destino), Manter) then Result:=False else Result:=true;
end;
I := FindNext(SR);
end;
end;

Com a entrada do Windows 7 a função “TSearchRec” não se mostrou eficiente e não funcionava mais, nem mesmo liberando as permissões de gravação das pastas envolvidas, por isso troquei para “TSHFileOpStruct”. Observe um procedimento com a função:

procedure TForm1.Button1Click(Sender: TObject);
var
Dados: TSHFileOpStruct;
begin
FillChar(Dados,SizeOf(Dados), 0);
with Dados do
begin
wFunc := FO_COPY;
pFrom := PChar(Edit1.Text);
pTo   := PChar(Edit2.Text);
fFlags:= FOF_ALLOWUNDO;
end;
SHFileOperation(Dados);
end;

Vale o registro que em uma cópia de arquivos, pode-se e deve-se utilizar “*.*”, exemplo

Origem: C:\RMAR\blocos\*.*

Destino: C:\Radio\

Nesse caso todos os arquivos da subpasta “blocos” irá para a pasta “Rádio”.

Não esqueça de lançar “ShellApi” no “uses” do seu Form.

Espero que tenha ajudado.

abraço
Plínio Cruz

Compatilhe esse artigo!

Nenhum Comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *