下面的功能为实现计算指定目录下某类型的文件个数,并写入List列表中,根据这个可写出对文件目录的其他的操作
procedure SearchFileExList(const ADir, vType: string; var AFileItems: TStringList);
var
vFound: TSearchRec;
vSourceDirs, vDestDirs: TStrings;
vFinished, i: integer;
vStopSearch: Boolean;
begin
vStopSearch := False;
vSourceDirs := TStringList.Create;
vDestDirs := TStringList.Create;
try
vFinished := FindFirst(ADir + '*.*', 63, vFound);
while (vFinished = 0) and not (vStopSearch) do
begin
if (vFound.Name <> '.') and (vFound.Name <> '..') then
begin
if (vFound.Attr and faDirectory) = faDirectory then
begin
//取得子目录名
vSourceDirs.Add(ADir + vFound.Name + '\');
end
else
begin
//只取当前目录下的文件名
if (vFound.Attr and faDirectory) <> faDirectory then begin
if (vFound.Name <> '') and (UpperCase(ExtractFileExt(vFound.Name)) = UpperCase(vType)) then
begin
AFileItems.Add(ADir + vFound.Name)
end;
end;
end;
end;
vFinished := FindNext(vFound);
end;
FindClose(vFound);
// 取得子目录中的文件名
if not vStopSearch then
for i := 0 to vSourceDirs.Count - 1 do
begin
SearchFileExList(vSourceDirs[i],'.DLL',AFileItems);
end;
finally
vSourceDirs.Free;
vDestDirs.Free;
end;
end;
加入另一种遍历目录的方法
procedure GetFileCount(ADir: string);
var
vNewDir, vFullName: string;
vSearchrec: TSearchRec;
begin
vNewDir := IncludeTrailingPathDelimiter(ADir);
if FindFirst(vNewDir + '*.*', faAnyFile-fasysFile, vSearchrec) = 0 then
begin
repeat
vFullName := vNewDir + vSearchrec.Name;
if (vSearchrec.Name <> '.') and (vSearchrec.Name <> '..') then
begin
if DirectoryExists(vFullName) then
GetFileCount(vFullName)
else
vCount := vCount + 1;
end;
until FindNext(vSearchrec) <> 0;
end;
end;