递归遍历文件

 

 

function EnumFileInRecursion(path:PChar):LongInt;stdcall;
var
    searchRec:TSearchRec;
    found:Integer;
    tmpStr:String;
    i:integer;
begin
    i:=1;
    Result:=0; //查找结果(文件数)
    //加上搜索后缀,得到类似'c:/*.*' 、'c:/windows/*.*'的搜索路径
    tmpStr:=StrPas(path)+'/*.*';
    //在当前目录查找第一个文件、子目录
    found:=FindFirst(tmpStr,faAnyFile,searchRec);
    while found=0 do
    //找到了一个文件或目录后
    begin
        //如果找到的是个目录
        if (searchRec.Attr and faDirectory)<>0 then
        begin
            {在搜索非根目录(C:/、D:/)下的子目录时会出现'.','..'的"虚拟目录"
            大概是表示上层目录和下层目录吧。。。要过滤掉才可以}
            if (searchRec.Name <> '.') and (searchRec.Name <> '..') then
            begin
                {由于查找到的子目录只有个目录名,所以要添上上层目录的路径
                searchRec.Name = 'Windows';tmpStr:='c:/Windows';
                加个断点就一清二楚了}
                tmpStr:=StrPas(path)+'/'+searchRec.Name;
                //自身调用,查找子目录,递归。。。。
                Result:=Result+EnumFileInRecursion(PChar(tmpStr));
            end;
        end
        //如果找到的是个文件
        {这个也是递归的结束条件,结束条件对于理解递归来说,相当重要}
        else begin
            {Result记录着搜索到的文件数。可是我是用CreateThread创建线程
            来调用函数的,不知道怎么得到这个返回值。。。我不想用全局变量}
            //把找到的文件加到Memo控件
            ArrFileName[i]:=StrPas(path)+'/'+searchRec.Name;
            i:=i+1;
            //FileNum:=FileNum+1;
            //FrmMain.Memo1.Lines.Add(StrPas(path)+'/'+searchRec.Name);
         end;
         //查找下一个文件或目录
        found:=FindNext(searchRec);
    end;
    //释放资源
    FindClose(searchRec);
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值