怎么样才能遍历一个目录跟其下的子目录(以二种方式实现

本文介绍如何遍历一个目录及其子目录,包括计算特定类型文件的数量并将结果存储到List列表中,从而扩展到其他文件操作。
摘要由CSDN通过智能技术生成
 

下面的功能为实现计算指定目录下某类型的文件个数,并写入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;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值