Delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)
来源:互联网 发布:淘宝店铺推荐 编辑:程序博客网 时间:2024/06/06 12:58
procedure EnumFileInQueue(path: PChar; fileExt: string; fileList: TStringList); var searchRec: TSearchRec; found: Integer; tmpStr: string; curDir: string; dirs: TQueue; pszDir: PChar; begin dirs := TQueue.Create; //创建目录队列 dirs.Push(path); //将起始搜索路径入队 pszDir := dirs.Pop; curDir := StrPas(pszDir); //出队 {开始遍历,直至队列为空(即没有目录需要遍历)} while (True) do begin //加上搜索后缀,得到类似'c:\*.*' 、'c:\windows\*.*'的搜索路径 tmpStr := curDir + '\*.*'; //在当前目录查找第一个文件、子目录 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 := curDir + '\' + searchRec.Name; {将搜索到的目录入队。让它先晾着。 因为TQueue里面的数据只能是指针,所以要把string转换为PChar 同时使用StrNew函数重新申请一个空间存入数据,否则会使已经进 入队列的指针指向不存在或不正确的数据(tmpStr是局部变量)。} dirs.Push(StrNew(PChar(tmpStr))); end; end else //如果找到的是个文件 begin {Result记录着搜索到的文件数。可是我是用CreateThread创建线程 来调用函数的,不知道怎么得到这个返回值。。。我不想用全局变量} //把找到的文件加到Memo控件 if fileExt = '.*' then fileList.Add(curDir + '\' + searchRec.Name) else begin if SameText(RightStr(curDir + '\' + searchRec.Name, Length(fileExt)), fileExt) then fileList.Add(curDir + '\' + searchRec.Name); end; end; //查找下一个文件或目录 found := FindNext(searchRec); end; {当前目录找到后,如果队列中没有数据,则表示全部找到了; 否则就是还有子目录未查找,取一个出来继续查找。} if dirs.Count > 0 then begin pszDir := dirs.Pop; curDir := StrPas(pszDir); StrDispose(pszDir); end else break; end; //释放资源 dirs.Free; FindClose(searchRec); end; //调用 procedure TForm1.Button1Click(Sender: TObject); var dir: string; FileNameList: TStringList; begin dir := trim(Edit1.Text); FileNameList := TStringList.Create; //EnumFileInQueue(PChar(dir), '.*', FileNameList); EnumFileInQueue(PChar(dir), '.*', FileNameList); ShowMessage(IntToStr(FileNameList.Count)); FileNameList.Free; end;
- delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)
- Delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)
- Delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)
- Delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)
- Shell编程:在当前目录下遍历所有文件和子目录及子目录下的文件
- 遍历指定目录下的所有文件和目录, 以及子目录下的文件和目录
- 遍历目录下所有各级子目录文件的全路径
- Delphi中遍历目录和遍历目录及子目录函数
- 遍历一个目录(含子目录)下所有文件
- shell:遍历目录和子目录的所有文件
- Python 遍历目录和子目录下所有文件,并替换其中的字符串
- 遍历指定目录下所有子目录和子文件的函数
- php遍历windows下中文目录下的所有文件名
- 获取指定目录下的所有文件名(包括子目录)
- 遍历目录下的文件和子目录下的文件
- win32下,遍历目录下的文件和子目录
- 遍历某一个指定目录下的所有子目录和文件(递归)
- MFC遍历指定目录下的所有文件/文件夹(不遍历子目录)
- AUTO INCREMENT 字段【MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务】 .
- 基于visual Studio2013解决C语言竞赛题之1022最大数最小数
- Nginx架构
- Delphi异常机制与SEH
- [MISTAKEs] UPPER LETTER POSTFIX IS A C++ FILE
- Delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)
- 时间编程
- 写在开博前的一些碎碎念
- 基于visual Studio2013解决C语言竞赛题之1023判断排序
- 查询存在于一个表而不存在于另一个表中的数据
- !!!Chapter 2 The Physical Layer
- 【Pia开发日记】schedule_selector中的this指针
- Hibernate的关系映射总结annotation版本
- Hadoop 1.2.1: Warning: $HADOOP_HOME is deprecated.