À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.