请问如何遍历所有可用硬盘,并且搜索所有文件夹找出文件,只要求找到一个符合的就停止!
1、遍历所有可用硬盘盘符;
2、搜索硬盘下所有文件夹,并找出匹配文件;
3。只要求找到一个符合的就停止搜索,转而继续搜索下一个文件。有谁会啊!帮帮忙!

解决方案 »

  1.   

    来的有点迟!
    还有FindFirstFile
    FindNextFile
    FindClose//一定要关闭呀
      

  2.   

    遍历所有盘符,有api函数可以得到盘符列表,遍历文件夹就用递归好了。便利盘符的代码:procedure TForm1.LoadDrivers();
    var
      Bits:set of 0..25;
      Num:integer;
      Item1:TMenuItem;
    begin
      PopupMenu1.Items[0].Clear;
      integer(Bits):=Windows.GetLogicalDrives;
      for Num:=0 to 25 do
        if Num in Bits then begin
          Item1:=TMenuItem.Create(self);
          Item1.Caption:=Char(Num+Ord('A'))+':\';
          Item1.OnClick:=OpenURL;
          PopupMenu1.Items[0].Add(Item1);
          //Item1.Free;
          case GetDriveType(pchar(char(Num+ord('A'))+':\')) of
            0:Item1.ImageIndex:=0;
            1:Item1.ImageIndex:=1;
            DRIVE_REMOVABLE:Item1.ImageIndex:=2;
            DRIVE_FIXED:Item1.ImageIndex:=3;
            DRIVE_REMOTE:Item1.ImageIndex:=4;
            DRIVE_CDROM:Item1.ImageIndex:=5;
            DRIVE_RAMDISK:Item1.ImageIndex:=6;
          end;
        end;
    end;下面这段是递归统计某一目录下所有文件大小的,可以参考一下:
    function TForm1.DirSize(Dir:string;DirBytes:int64):int64;
    var
      SearchRec : TSearchRec;
      Separator : string;
    begin
      if Copy(Dir,Length(Dir),1)='\' then
        Separator := ''
      else
        Separator := '\';
      if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0 then begin
        if FileExists(Dir+Separator+SearchRec.Name) then begin
          DirBytes := DirBytes + SearchRec.Size;
          {Memo1.Lines.Add(Dir+Separator+SearchRec.Name);}
        end else if DirectoryExists(Dir+Separator+SearchRec.Name) then begin
          if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin
            DirBytes:=DirBytes+DirSize(Dir+Separator+SearchRec.Name,DirBytes);
          end;
        end;
        while FindNext(SearchRec) = 0 do begin
          if FileExists(Dir+Separator+SearchRec.Name) then begin
            DirBytes := DirBytes + SearchRec.Size;
            {Memo1.Lines.Add(Dir+Separator+SearchRec.Name);}
          end else if DirectoryExists(Dir+Separator+SearchRec.Name) then
          begin
            if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin
              DirBytes:=DirBytes+DirSize(Dir+Separator+SearchRec.Name,DirBytes);
            end;
          end;
        end;
      end;
      FindClose(SearchRec);
      result:=DirBytes
    end;
      

  3.   

    我有更好的方法,不过本人在北京,手上没有原码。留下Email,回成都发给你。
      

  4.   

    好,先谢了![email protected]
      

  5.   

    to  tonylk(=www.tonixsoft.com=) and  All
    主要是只要找到一个符合的文件就结束搜索,不再继续搜索其他目录,减少搜索的时间!
    不一定要源码,告诉一个想法也行!