Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 06 de Outubro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
68 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Localizando Arquivos
Publicado por jcarvalho : Quinta, Setembro 07, 2006 - 10:49 GMT-3 (4318 leituras)
Comentários 2 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Sempre que estamos desenvolvendo um programa e precisamos de uma função ou procedimento que requer tempo para desenvolver e testar, ficamos entre o código bem escrito e a pressa de resolver o problema e quase sempre optamos pelo meio termo: pegamos um pronto e deixamos bem escrito (bem escrito para nós - adaptado às nossas necessidades).

Mas a melhor saída é desenvolver procedimentos e funções com propósito geral, para que sejam reaproveitadas.

Seguindo esta linha, quando estava desenvolvendo um programa de backup para uso pessoal, me deparei com a necessidade de desenvolver uma função para localizar arquivo em uma árvore, e desenvolvi a função chamada FindFiles:

Function FindFiles(aFiles: string; FindProc: TFindFilesProc; Recursive: Boolean=True):Integer ;
Var
  FD : TWin32findData ;
  WildCard : string ;
  n: Integer ;
  stoped : Boolean ;

  procedure _FindFile(aPath: String);
  Var H: Thandle ;
  Begin
    H := FindFirstFile(Pchar(aPath+WildCard),fd);
    If h <> INVALID_HANDLE_VALUE then
    Repeat
      If (copy(FD.cFileName,1,1) <> '.') then
      Begin
        Inc(n);
        If Assigned(FindProc) then
          FindProc(FD, aPath+fd.cFileName,Stoped);
      End ;
    until (not (FindNextFile(h,fd))) or (Stoped = True);
    Windows.FindClose(h);
  End ;

  Procedure _FindDir(aPath: String) ;
  Var H : THandle ;
  Begin
    _findFile(aPath);
    If Stoped then Exit ;
    H := FindFirstFile(Pchar(aPath+'*.*'),FD);
    If H <> INVALID_HANDLE_VALUE THEN
    Repeat
      If (Copy(FD.cFileName,1,1) <> '.') and
         ((FD.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)<> 0) then
        _FindDir(apath+fd.cfilename+'\') ;
    until not (FindNextFile(h,fd)) ;
    windows.FindClose(h);
  End ;

Begin
  WildCard := ExtractFileName(aFiles);
  n := 0 ;
  If Recursive then
    _findDir(ExtractFilePath(aFiles))
  Else
    _findFile(ExtractFilePath(aFiles));
  Result := n ;
End;

Sobre a Função

Parâmetros:

aFiles: String - Nome do arquivo ou pasta com o caminho completo. Podemos usar WildCard tal qual o Windows, exemplo: 'C:\teste\a*.*', 'C:\teste\*.txt' e assim por diante.

FindProc: TfindFilesProc - é um procedimento CallBack que deve ser declarado da seguinte forma:

  TfindFilesProc = procedure(FindData: TWin32FindData; FileName: 
                             TfileName; var Stoped: Boolean);

Este parâmetro, pode ser passado também como 'nil'

Recursive: Boolean=True - Se true, a busca é executada de forma recursiva. False, não recursiva.

Retorno:

Número de arquivos encontrados.

Sobre o procedimento CallBack

O procedimento CallBack é chamado pela função FindFiles, cada vez que encontra um arquivo, portando ele pode ser implementado de forma a extrair qualquer dado da estrutura FindData: TWin32FindData, e o nome completo do arquivo, através do FileName: TfileName. Através dele, pode-se também interromper a busca, definindo o parâmetro Stoped como True.

Clique aqui para fazer o download do exemplo e ver o uso da função na prática.

Por: José Maria de Carvalho - jcarvalho@sercomtel.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: No7urno (mariusmgarcia@gmail.com) : Abr 06, 2017 - 05:45
(Informações sobre o membro | Enviar uma mensagem) http://http://
Boa tarde, como que faria para utilizar está função e deletar de uma lista de 30 arquivos os 10 últimos arquivos criados. Obrigado


por: hypersonico (mewrod@ig.com.br) : Nov 11, 2021 - 07:58
(Informações sobre o membro | Enviar uma mensagem) http://www.hypersonico.hpg.com.br
Isso me ajudou demais para um projeto que fiz, valeu amigo. ótimo trabalho.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados