+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 2 su 2

Discussione: cercare un file in pc

  1. #1
    Monti non è in linea Scolaretto
    Luogo
    Lecce
    Post
    52

    cercare un file in pc

    buongiorno a tutti,
    mi necessita 'scovare' un particolare file all'interno del hard disk
    tipo la funzione 'cerca' di windows...
    sto provando con il seguente codice
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       if findafile('c:', 'prime.exe') <> '' then
          showmessage('find it ' + path);
    end;
    che richiama la funzione
    codice:
    function TForm1.findafile(initialpath, name: string): string;
    Var s:Tsearchrec;
    Begin
      path := '';
      If initialpath[length(initialpath)]<>initialpath+'\' then;
         initialpath:=initialpath+'\';
         If findfirst(initialpath+name,faanyfile,s)=0 Then Begin
          findclose(s);
          result:=initialpath+name;
         End
       Else Begin
           If findfirst(initialpath+'*.*',faDirectory,s)=0 Then
              repeat
              If (( s.attr and faDirectory ) = faDirectory)and(s.name[1]<>'.') and
                (initialpath+s.name <> path) then begin
                result:=findafile(initialpath+s.name,name);
                if result <> '' then  begin
                   path := (initialpath+s.name);
                   showmessage('find in  :  ' + path);
                end;
              end;
              Until (findnext(s)<>0);
           findclose(s);
       End;
    End;
    ma ottengo solo un risultato che si ripete, con lo 'showMessage', diverse volte
    mentre so, tramite il 'cerca' di win, che ci sono altre copie dello stesso file nel disco
    ...dove sbaglio ?

  2. #2
    Monti non è in linea Scolaretto
    Luogo
    Lecce
    Post
    52

    risolto

    ho modificato leggermente la function

    codice:
    function TForm1.findafile(initialpath, name: string): string;
    var
       s:Tsearchrec;
    Begin
      if initialpath[length(initialpath)]<>initialpath+'\' then;
         initialpath:=initialpath+'\';
    
      if findfirst(initialpath+name,faanyfile,s)=0 Then Begin
         result:=initialpath+name;
         showmessage('find in  :  ' + result);
      end
      else begin
         if findfirst(initialpath+'*.*',faDirectory,s)=0 Then
            if (( s.attr and faDirectory ) = faDirectory)and(s.name[1]<>'.') then
               result:=findafile(initialpath+s.name,name);
         while (FindNext(s) = 0) do begin
            if (( s.attr and faDirectory ) = faDirectory)and(s.name[1]<>'.') then
               result:=findafile(initialpath+s.name,name);
         end;
         findclose(s);
      end;
    end;
    e così funziona.
    unica cosa non effettua la ricerca all'interno delle cartelle 'nascoste' ....

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi