我写了一个递归函数,判断多层目录是否为空(如果有文件存在,则返回false;否则返回true),但是总是返回true,为此我只能设置一个全局变量,根据变量的值来确定目录是否为空
function TfrmPro.IsEmptyMultiDir(ADir: string): Boolean;
var
  FindResult: integer;
  DSearchRec: TSearchRec;
  function IsDirNotation(ADirName: String): Boolean;
  begin
    Result := ((Pos('.',ADirName) > 0) or (Pos('..',ADirName) > 0));
  end;
begin
  Result := True;  if Copy(ADir, Length(ADir) - 1, 1) <> '\' then ADir := ADir + '\';  FindResult := FindFirst(ADir+'*.*',faAnyFile,DSearchRec);  while FindResult = 0 do
  begin
    Application.ProcessMessages;    if not IsDirNotation(DSearchRec.Name) then           //文件
    begin
      if (DSearchRec.Attr and faDirectory) = faDirectory then
        Result := IsEmptyMultiDir(ADir + DSearchRec.Name);
    end
    else
    begin
      if (DSearchRec.Name <> '') and (FileExists(ADir+ DSearchRec.Name))  then
      begin
        Result := False;
        nFirst := 0 ;
        Exit;
      end;
    end;
    FindResult := FindNext(DSearchRec)
  end;
end;帮忙看一下吧。。

解决方案 »

  1.   

    if Copy(ADir, Length(ADir) - 1, 1) <> '\' then ADir := ADir + '\';==>if Copy(ADir, Length(ADir), 1) <> '\' then ADir := ADir + '\';
      

  2.   

    Copy(ADir, Length(ADir) - 1, 1) 晕LZ这是取了倒数第二位
    COPY可不是从0开始的
      

  3.   

    哦,我上面写错了那句话,但是修改了之后返回的结果还是不对,在遇到第一个文件后还是继续执行findNext,
    返回值最终总是会变成true
      

  4.   


    if (DSearchRec.Attr and faDirectory) = faDirectory then
      Result := IsEmptyMultiDir(ADir + DSearchRec.Name);===》if (DSearchRec.Attr and faDirectory) = faDirectory then
          begin
            Result := IsEmptyMultiDir(ADir + DSearchRec.Name);
            if Result=False then
              break;
          end;