delphi中如何遍历查找文件夹下的某文件名

delphi中如何遍历查找文件夹下的某文件名,第1张

procedure EnumFileInQueue(path: PCharfileExt: stringfileList: 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

给你段代码,你试一下

所有文件 FileExt:='.*'

function GetFileList(Path, FileExt: string): TStringList

var

sch:TSearchrec

begin

Result:=TStringlist.Create

Path:=Trim(Path)

if Path[Length(Path)] <>'\' then Path := Path + '\'

if not DirectoryExists(Path) then

begin

Result.Clear

exit

end

if FindFirst(Path + '*', faAnyfile, sch) = 0 then

begin

repeat

Application.ProcessMessages

if ((sch.Name = '.') or (sch.Name = '..')) then Continue

if DirectoryExists(Path+sch.Name) then

begin

Result.Add(Path+sch.Name)

Result.AddStrings(GetFileList(Path+sch.Name,FileExt))

end

else

begin

if (UpperCase(extractfileext(Path+sch.Name)) = UpperCase(FileExt)) or (FileExt='.*') then

Result.Add(Path+sch.Name)

end

until FindNext(sch) <>0

SysUtils.FindClose(sch)

end

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7933615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存