我要遍历本机的所有驱动器,目录和子目录下的所有文件,目的是取其所有文件的文件名(含路径),用一个标签显示,这个过程可能要花一些时间,因此要再添加一个进度条显示进度,这种动态的效果该怎么实现呢?
我可以另开帖加分

解决方案 »

  1.   

    至于遍历操作,先取得所有硬盘
    procedure GetAvailableDriver(var ADriverList: TStringList);
    var
      drives: set of 0..25;
      DrivePath, _Drive: string;
      I: integer;
    begin
      ADriverList.Clear;
      DWORD(drives) := windows.GetLogicalDrives;
      for I := 0 to 25 do
        if I in drives then //如果驱动器存在
        begin
          DrivePath := Char(Ord('A') + i) + ':\';
          _Drive := Char(Ord('A') + i);
          case GetDriveType(pchar(DrivePath)) of
            DRIVE_FIXED, DRIVE_REMOTE: ADriverList.Add(trim(_Drive)); //如果是硬盘
          end;
        end;
    end;遍历查找文件
    代码如下:1. 从搜索记录中判断是否是子目录。 function IsValidDir(SearchRec:TSearchRec):Boolean;begin
    if (SearchRec.Attr=16) and(SearchRec.Name<>'.') and(SearchRec.Name<>'..') thenResult:=TrueelseResult:=False;end;2. 这是查询主体函数。参数介绍:Mainpath: 指定的查询目录。Filename: 欲查询的文件。Foundresult: 返回的含完整路径的匹配文件(可能有多个)。如果有匹配文件,函数返回True,否则,返回False; function SearchFile(mainpath:string;filename:string;var foundresult:TStrings):Boolean;vari:integer;Found:Boolean;subdir1:TStrings;searchRec:TsearchRec;beginfound:=false;if Trim(filename)<>'' thenbeginsubdir1:=TStringList.Create;//字符串列表必须动态生成//找出所有下级子目录。if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) thenbeginif IsValidDir(SearchRec) thensubdir1.Add(SearchRec.Name);while (FindNext(SearchRec) = 0) dobeginif IsValidDir(SearchRec) thensubdir1.Add(SearchRec.Name);end;end;FindClose(SearchRec);//查找当前目录。if FileExists(mainpath+filename) thenbeginfound:=true;foundresult.Add(mainpath+filename);end;//这是递归部分,查找各子目录。for i:=0 to subdir1.Count-1 dofound:=Searchfile(mainpath+subdir1.Strings[i]+'\',Filename,foundresult)or found;//资源释放并返回结果。subdir1.Free;end;result:=found;end;