uma dica sobre como listar qualquer tipo de arquivos de um diretorio. o toque especial dessa procedure e que ela pode entrar em todos os diretorios que estão dentro do diretorio inicial, para procurar arquivos do tipo especificado.
parametros da procedure:
diretorioinicial - diretorio que a procedure comeca a sua busca ex: c:\windows\ ou ainda c:\ mascara - mascara de arquivo ex: *.txt ou ainda *.* listtotaldir - quando true, ela fornece o caminho completo recursive - quando true, ativa a busca do arquivo dentro de outros diretorios, que estao dentro do diretorio inicial
obs.:O form que ira chamar esta função deve possuir uma variavel global declarada da sequinte forma
listtemp2:Tstrings;
ele deve ser criada com o comando
listtemp2 := TstringList.Create;
depois de chamada a procedure o resultado final estara nesta variavel
procedure ListarArquivos(diretorioInicial, mascara: string; listtotaldir: boolean = false; recursive: boolean = true);
var
i: integer;
listatemp: TStrings;
procedure ListarDiretorios(Folder: string; lista: Tstrings);
var
Rec: TSearchRec;
i: integer;
temps: string;
begin
lista.Clear;
if SysUtils.FindFirst(Folder + '*', faDirectory, Rec) = 0 then
try
repeat
lista.Add(rec.Name);
until SysUtils.FindNext(Rec) <> 0;
finally
if lista.count <> 0 then
begin
// deleta o diretorio ..
lista.Delete(1);
// deleta o diretorio .
lista.Delete(0);
i := 0;
//deleta os arquivos isto e fica apenas os diretorios
if lista.count <> 0 then
begin
repeat
temps := lista.Strings[i];
temps := extractfileext(temps);
if temps <> '' then
lista.Delete(i)
else
inc(i);
until i >= lista.Count;
end;
end;
end;
end;
procedure ListarAtahos(Folder, mask: string; Lista: Tstrings);
var
Rec: TSearchRec;
begin
lista.Clear;
if SysUtils.FindFirst(Folder + mask, faAnyFile, Rec) = 0 then
try
repeat
lista.Add(rec.Name);
until SysUtils.FindNext(Rec) <> 0;
finally
SysUtils.FindClose(Rec);
end;
end;
procedure AddLIstInOther(ListSource, ListDestino: TStrings);
var
f: integer;
begin
for f := 0 to ListSource.Count - 1 do
begin
ListDestino.Add(ListSource.Strings[f]);
end;
end;
begin
listatemp := TStringList.Create;
ListarAtahos(diretorioInicial, mascara, listatemp);
if listtotaldir = true then
begin
for i := 0 to listatemp.Count - 1 do
begin
listatemp.Strings[i] := diretorioInicial + listatemp.Strings[i];
end;
end;
AddLIstInOther(listatemp, listtemp2);
if recursive = true then
begin
ListarDiretorios(diretorioInicial, listatemp);
for i := 0 to listatemp.Count - 1 do
begin
ListarArquivos(diretorioInicial + listatemp.Strings[i] + '\', mascara, listtotaldir, recursive);
end;
end;
listatemp.Free;
end;
exemplo:
coloca-se um listbox, e um button no form.
depois declara-se a variavel global no form
ex:
var
Form1: TForm;
listtemp2: TStrings;
e no evento onclick do button a seguinte procedure
listtemp2 := TStringList.Create;
ListarArquivos('c:\windows\', '*.exe', true, true);
listbox1.items := listtemp2;
listtemp2.free;
0 comentários :: 840 - Listar Arquivos de Um Diretório
Postar um comentário