Páginas

Pesquise o Assuntos Delphi Desejado

840 - Listar Arquivos de Um Diretório

Listar Arquivos de Um Diretório
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;



Enviada por: Cleiton S. Goulart


Um colaborador da DTDelphi 2.7
Colabore você com a próxima edição!

0 comentários :: 840 - Listar Arquivos de Um Diretório

Postar um comentário