procedure FindAllFile(const Dir: string;List: TStringlist);
var
   hFindFile: THandle;
   FindFileData: WIN32_FIND_DATA;
   FullName,FName,s:string;
begin
   s:=IncludeTrailingPathDelimiter(Dir);
   hFindFile := FindFirstFile(pchar(s+'*.*'), FindFileData);
if hFindFile <> 0 then begin
     repeat
       FName:=FindFileData.cFileName;
       FullName:=s+FName;
      if (FName='.') or (FName='..') then continue;
      if (FindFileData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
         //FindAllFile(FullName,List) //递归包含子目录
      else
         begin
           List.Add(FullName);
        end;
     until FindNextFile(hFindFile, FindFileData) = false;
     windows.FindClose(hFindFile);
end;
end;

解决方案 »

  1.   

    下面的例子没测试,共参考var
      List: TStringList;
      Dir: String;
    begin
      List := TStringList.Create;
      Dir := 'C:\Program Files\Borland\Delphi7\Bin';
      FindAllFile(Dir, List);
      // 进行你的操作
      ...
      List.Free;
    end;
      

  2.   

    procedure FindAllFile(const Dir: string;List: TStringlist); 
    看这个过程,你的目的是:将文件名列入list中,那么这里应该用:const Dir: string;VAR List: TStringlist
    因为调用过程的结果是放入这个List中,那么就需要返回它.
      

  3.   

    1F正确!
    对于List类型,做为参数本身就是引用传递,无需Var