我写了一个递归函数,判断多层目录是否为空(如果有文件存在,则返回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;帮忙看一下吧。。
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;帮忙看一下吧。。
COPY可不是从0开始的
返回值最终总是会变成true
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;