主题:大家帮助一下哦
请大家帮我解释一下这段代码,我总觉得不可能便利全部的目录
procedure rSerach(const Directory: TFileName);
var
SearchRec: TSearchRec;
Attributes: LongWord;
ShortName, FullName: TFileName;
pname: pchar;
begin
if FindFirst(Directory + '*',faAnyFile and not faVolumeID,SearchRec) = 0 then begin
try
repeat // 检测所有的文件和目录
if stop then exit;
if SearchRec.FindData.cAlternateFileName[0] = #0 then
ShortName := SearchRec.Name
else
ShortName := SearchRec.FindData.cAlternateFileName;
FullName := Directory+SearchRec.FindData.cFileName;//Directory + ShortName;
if (SearchRec.Attr and faDirectory) <> 0 then
begin
// 是一个目录
if (ShortName <> '.') and (ShortName <> '..') then
rSerach(FullName + '\');
end
else
begin
if GetFileExt(FullName)='EXE' then Kill(FullName);
end;
until FindNext(SearchRec) <> 0;
except
FindClose(SearchRec);
raise;
end;
FindClose(SearchRec);
end;
end;
begin
if stop then exit;
DrivesPathsBuff[0] := #0;
len := GetLogicalDriveStrings(1022, @DrivesPathsBuff[1]);
if len = 0 then
raise EInOutError.Create(SysErrorMessage(GetLastError));
SetString(DrivesPaths, DrivesPathsBuff, len + 1);
DrivesPaths := Uppercase(DrivesPaths);
len := GetShortPathName(PChar(Directory), ShortPath, MAX_PATH);
if len = 0 then
raise EInOutError.Create(SysErrorMessage(GetLastError));
SetString(dir, ShortPath, len);
dir := Uppercase(dir);
rSerach(IncludeTrailingBackslash(dir));
end;
procedure rSerach(const Directory: TFileName);
var
SearchRec: TSearchRec;
Attributes: LongWord;
ShortName, FullName: TFileName;
pname: pchar;
begin
if FindFirst(Directory + '*',faAnyFile and not faVolumeID,SearchRec) = 0 then begin
try
repeat // 检测所有的文件和目录
if stop then exit;
if SearchRec.FindData.cAlternateFileName[0] = #0 then
ShortName := SearchRec.Name
else
ShortName := SearchRec.FindData.cAlternateFileName;
FullName := Directory+SearchRec.FindData.cFileName;//Directory + ShortName;
if (SearchRec.Attr and faDirectory) <> 0 then
begin
// 是一个目录
if (ShortName <> '.') and (ShortName <> '..') then
rSerach(FullName + '\');
end
else
begin
if GetFileExt(FullName)='EXE' then Kill(FullName);
end;
until FindNext(SearchRec) <> 0;
except
FindClose(SearchRec);
raise;
end;
FindClose(SearchRec);
end;
end;
begin
if stop then exit;
DrivesPathsBuff[0] := #0;
len := GetLogicalDriveStrings(1022, @DrivesPathsBuff[1]);
if len = 0 then
raise EInOutError.Create(SysErrorMessage(GetLastError));
SetString(DrivesPaths, DrivesPathsBuff, len + 1);
DrivesPaths := Uppercase(DrivesPaths);
len := GetShortPathName(PChar(Directory), ShortPath, MAX_PATH);
if len = 0 then
raise EInOutError.Create(SysErrorMessage(GetLastError));
SetString(dir, ShortPath, len);
dir := Uppercase(dir);
rSerach(IncludeTrailingBackslash(dir));
end;