Pesquisa e cópia de arquivos, diretórios e subdiretórios - Delphi

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (0)

Veja neste artigo como pesquisar e copiar arquivos e pastas

Neste artigo,irei compartilhar o código fonte de uma procedure que visa copiar a estrutura de pastas de forma personalizável no diretório destino. O Código irá percorrer a estrutura de arquivos da pasta selecionada utilizando os comandos: FINDFIRST e FINDNEXT. Essas funções retornam 0 quando encontram um arquivo ou pasta;

Para verificar se é um outro diretório devemos checar se o atributo do arquivo é igual a 16. Então adicionaremos o caminho do diretório em uma stringlist para depois copiar seus arquivos.

procedure TfrmTeste.CopyFiles(DirOrigem, DirDest: string);
var
  Arquivos: TSearchRec;
  Encontrou: Integer;
  str : TStringList;
  i : integer;
  CriaDir : String;
begin
  str := TStringList.Create;
  str.Add(DirOrigem);
  i := 0;
  while i <= str.count -1 do
  begin
    CriarDir := StringReplace(strList[i], DirOrigem, '',[rfReplaceAll, rfIgnoreCase]);
    if not DirectoryExists(DirDest + CriarDir ) then {No caso as estruturas de pastas serão iguais logo iremos verificar se a pasta existe o destino}
        ForceDirectories(DirDest + CriarDir );
  SetCurrentDir(DirOrigem + CriarDir);
  Encontrou := FindFirst('*', faAnyFile , Arquivos);   {Atrr 16 corresponde a pasta, e 32 a arquivos}
  while Encontrou = 0 do
  begin
   if (Arquivos.attr = 16) then  {Verifica se é pasta}
     str.Add(DirOrigem + Arquivos.Name + '\') {Adiciona a StringList para procura de arquivos}
  else
    CopyFile(Pchar(DirOrigem + Arquivos.Name),PChar(DirDest + Arquivos.Name), True);
    {Coloque como True se quiser que se já existir o arquivo ele seja sobrescrito }
   SetFileAttributes(PChar(DirDest + Arquivos.Name), FILE_ATTRIBUTE_NORMAL); {Tira a propriedade READ - ONLY do arquivo}
    Encontrou := FindNext(Arquivos);
  end;
  FindClose(Arquivos);
  Inc(i,1); {Incrementa o contador}
  end;
end;
Qualquer dúvida ou sugestão de melhoria no código,por favor poste um comentário.=)
 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?