代码如下:unit unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, FileCtrl, Grids, Outline, DirOutln;type
  TMainForm = class(TForm)
    dcbDrives: TDriveComboBox;
    edtFileMask: TEdit;
    lblFileMask: TLabel;
    btnSearchForFiles: TButton;
    lbFiles: TListBox;
    dolDirectories: TDirectoryOutline;
    procedure btnSearchForFilesClick(Sender: TObject);
    procedure dcbDrivesChange(Sender: TObject);
  private
    FFileName: String;
    function GetDirectoryName(Dir: String): String;
    procedure FindFiles(APath: String);
  end;var
  MainForm: TMainForm;implementation{$R *.DFM}function TMainForm.GetDirectoryName(Dir: String): String;begin
  if Dir[Length(Dir)]<> '\' then
    Result := Dir+'\'
  else
    Result := Dir;
end;procedure TMainForm.FindFiles(APath: String); 
var
  FSearchRec,
  DSearchRec: TSearchRec;
  FindResult: integer;  function IsDirNotation(ADirName: String): Boolean;
  begin
    Result := (ADirName = '.') or (ADirName = '..'); ???这句代码有什么用?
  end;begin
  APath := GetDirectoryName(APath); // Obtain a valid directory name  FindResult := FindFirst(APath+FFileName,faAnyFile+faHidden+
                          faSysFile+faReadOnly,FSearchRec);  ???在findfirst函数中就写                                     一个faanyfile不就行了  try
   
    while FindResult = 0 do
    begin
      lbFiles.Items.Add(LowerCase(APath+FSearchRec.Name));
      FindResult := FindNext(FSearchRec);
    end;
   
    FindResult := FindFirst(APath+'*.*', faDirectory, DSearchRec); ???这里的fadirectory做                                      什么用啊    while FindResult = 0 do
    begin
       if ((DSearchRec.Attr and faDirectory) = faDirectory) and  not
        IsDirNotation(DSearchRec.Name) then               ???这句代码做什么用?
        FindFiles(APath+DSearchRec.Name); // Recursion here
      FindResult := FindNext(DSearchRec);
    end;
  finally
    FindClose(FSearchRec);
  end;
end;procedure TMainForm.btnSearchForFilesClick(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;
  try
    lbFiles.Items.Clear;
    FFileName := edtFileMask.Text;
    FindFiles(dolDirectories.Directory);
  finally
    Screen.Cursor := crDefault;
  end;
end;procedure TMainForm.dcbDrivesChange(Sender: TObject);
begin
  dolDirectories.Drive := dcbDrives.Drive;
end;end.
以上代码共用四处不明,谢谢大家了!

解决方案 »

  1.   

    >>function IsDirNotation(ADirName: String): Boolean;
    如果找到的文件是 "." or "..", 就好象你在 dos 下輸入 dir 一樣, 這兩個就返回 true, 
    然後, 下面如果找到這兩天, 就忽略不處理
      

  2.   

    >>FindResult := FindFirst(APath+'*.*', faDirectory, DSearchRec); ???这里的
    如果有目錄, 就可以繼續下面的查找, 如果已經沒有下級目錄了, 下面的就不用再找了
      

  3.   

    在这段代码中 FindResult := FindFirst(APath+FFileName,faAnyFile+faHidden+
                                    faSysFile+faReadOnly,FSearchRec);  faAnyfile不就等于全部了吗?  为何还要写 faAnyFile+faHidden+faSysFile+faReadOnly 这么多
      

  4.   

    if DSearchRec.Attr and faDirectory) = faDirectory这段代码是做什么的呢?
      

  5.   

    faAnyfile指全部可见的,不包括隐藏,系统文件.DSearchRec.attr and faDirectory=faDirectory //如果是文件夹