Listando arquivos de um diretório

Veja neste artigo de Fabrício Desbessel, como listar os arquivos de um diretório em um componente Memo.

Às vezes precisamos listar arquivos de um diretório para fazer algum processamento nos mesmos. Um exemplo disso seria a importação de dados em arquivos textos para o banco de dados. Pense que para isso seria muito mais fácil informar somente o diretório para que todos os arquivos fossem processados.

Então, mãos à obra. Crie uma nova aplicação no Delphi 7 colocando e configurando os seguintes componentes:

 

Label1: Mude o Caption para “Diretório”;

Edit1: Mude o Name para “edtDiretorio” e apague o Text;

CheckBox1: Mude o Caption para “Incluir Subdiretórios” e o Name para “chkSub”;

Label2: Mude o Caption para: “Arquivos”;

Memo1: Mude o Name para “memLista” e apague a propriedade Lines;

Button1: Mude o Caption para “&Listar”.

 

A aparência do software deve ficar conforme a Figura 1.

 

Figura 1. Aparência depois de configurado

Clique duas vezes no botão Listar e coloque o seguinte código:

 

memLista.Lines.Clear;

ListarArquivos(edtDiretorio.Text, chkSub.Checked);

 

Esse é código é responsável por limpar o conteúdo do Memo e chamar um procedimento que irá buscar os arquivos contidos em um diretório, levando em conta se o usuário escolheu procurar também nos subdiretórios.

Para criar o procedimento suba o editor de código até a seção Private. Abra um espaço e coloque o seguinte código:

 

procedure ListarArquivos(Diretorio: string; Sub:Boolean);

 

Com o cursor em cima do último código, pressione CTRL+SHIFT+C para que o Delphi crie a estrutura do procedimento. Dentro desse procedimento coloque o seguinte:

 

var

  F: TSearchRec;

  Ret: Integer;

  TempNome: string;

begin

  Ret := FindFirst(Diretorio+'\*.*', faAnyFile, F);

  try

    while Ret = 0 do

    begin

      if TemAtributo(F.Attr, faDirectory) then

      begin

        if (F.Name <> '.') And (F.Name <> '..') then

          if Sub = True then

          begin

            TempNome := Diretorio+'\' + F.Name;

            ListarArquivos(TempNome, True);

          end;

      end

      else

      begin

        memLista.Lines.Add(Diretorio+'\'+F.Name);

      end;

        Ret := FindNext(F);

    end;

  finally

  begin

    FindClose(F);

  end;

  end;

 

Veja que o código chamará uma outra função para verificar se o item encontrado é um diretório. Nesse caso, será chamado novamente o procedimento, informando o diretório encontrado. Isso só irá acontecer se na busca for informado para incluir subdiretórios.

Vá até a seção Private e declare a função:

 

function TemAtributo(Attr, Val: Integer): Boolean;

 

Pressione CTRL+SHIFT+C e coloque o código da função:

 

Result := Attr and Val = Val;

 

Pronto, agora você pode testar, informando um diretório.

 

Figura 2. Software em teste

Pense que, ao invés de colocar o arquivo em um Memo, você pode chamar uma função que leia os arquivos encontrados.

Artigos relacionados