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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo