Ir para conteúdo
Fórum Script Brasil
  • 0

Fazendo um busca de arquivo em TODO O HD


gleury

Pergunta

Preciso de uma rotina que encontre uma arquivo localizado dentro do meu HD. por exemplo so vou passar o nome do arquivo ex: 'Inicio.txt', como se fosse a pesquisa do windows, so passo o nome do arquivo e retorna o caminho do mesmo.

Como posso fa zer um busca de arquivo EM TODO O HD?

Eu dei uma busca na internet e encontrei essa rotina:

Interface

type

PRecInfo=^TRecInfo;

Trecinfo=record

prev:PRecInfo;

fpathname:string;

srchrec:Tsearchrec;

end;

implememtation

function TForm1.RecurseDirectory(fname:string):tstringlist;

var

f1,f2:Tsearchrec;

p1,tmp:PRecInfo;

fwc:string;

fpath:string;

fbroke1,fbroke2:boolean;

begin

result:=tstringlist.create;

fpath:=extractfilepath(fname);

fwc:=extractfilename(fname);

new(p1);

p1.fpathname:=fpath;

p1.prev:=nil;

fbroke1:=false;

fbroke2:=false;

while(p1<>nil) do

begin

if (fbroke1=false) then

if (fbroke2=false) then

begin

if (findfirst(fpath+'*',faAnyfile,f1)<>0) then

break;

end

else if (findnext(f1)<>0) then

begin

repeat

findclose(f1);

if (p1=nil) then

break;

fpath:=p1.fpathname;

f1:=p1.srchrec;

tmp:=p1.prev;

dispose(p1);

p1:=tmp;

until (findnext(f1)=0);

if (p1=nil) then

break;

end;

if((f1.Name<>'.') and (f1.name<>'..') and ((f1.Attr and fadirectory)=fadirectory)) then

begin

fbroke1:=false;

new(tmp);

with tmp^ do

begin

fpathname:=fpath;

srchrec.Time:=f1.time;

srchrec.Size:=f1.size;

srchrec.Attr:=f1.attr;

srchrec.Name:=f1.name;

srchrec.ExcludeAttr:=f1.excludeattr;

srchrec.FindHandle:=f1.findhandle;

srchrec.FindData:=f1.FindData;

end;

tmp.prev:=p1;

p1:=tmp;

fpath:=p1.fpathname+f1.name+'';

if findfirst(fpath+fwc,faAnyfile,f2)=0 then

begin

result.add(fpath+f2.Name);

while(findnext(f2)=0) do

result.add(fpath+f2.Name);

findclose(f2);

end;

fbroke2:=false;

end

else

begin

if (findnext(f1)<>0) then

begin

findclose(f1);

fpath:=p1.fpathname;

f1:=p1.srchrec;

fbroke1:=false;

fbroke2:=true;

tmp:=p1.prev;

dispose(p1);

p1:=tmp;

end

else

begin

fbroke1:=true;

fbroke2:=false;

end;

end;

end;

fpath:=extractfilepath(fname);

if findfirst(fname,faAnyfile,f1)=0 then

begin

result.add(fpath+f2.Name);

while(findnext(f1)=0) do

result.add(fpath+f2.Name);

findclose(f1);

end;

end;

//Chame a funcao deste jeito:

procedure TForm1.Button1Click(Sender: TObject);

var

l1:Tstringlist;

begin

l1:=tstringlist.create;

listbox1.items.clear;

listbox1.Items.BeginUpdate;

l1:=recursedirectory1('C:*.exe');

listbox1.items.assign(l1);

freeandnil(l1);

listbox1.Items.endUpdate;

end;

Essa Rotina fucionou pefeitamente bem, porém ela só fuciona no windows XP e eu queria que fucionasse também no WINDOWS 7.

Espero q vocês mi ajudem.

Obrigado...

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...