您的位置:程序门 -> delphi -> windows sdk/api



谁知道为什么,系统造成的吗


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


谁知道为什么,系统造成的吗[已结贴,结贴人:xiaoli2200]
发表于:2008-01-20 16:43:24 楼主
下面这段代码来源于一本delphi学习的书上,运行测试通过,但发现一个重要问题,为什么当我查找'*12*'这样的通配符时(当然也可以不是12,只是举例),出现找到的文件有一些并非包括'12',当然12的也全出来,比如查到的文件有mmsbar_mobileqq.ico这样一些,后来我把这些文件移到另一个文件内,就查不出来了,难道这些跟路径有关吗,mmsbar_mobileqq.ico文件在qq安装目录中的一个子目录中,一点问题也没有啊,哪位高人帮我看看,我急切想知道答案,谢谢,分多多给


delphi(pascal) code
unit unit1; interface uses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, stdctrls, extctrls, filectrl; type tform1 = class(tform) directorylistbox1: tdirectorylistbox; labelededit1: tlabelededit; button1: tbutton; listbox1: tlistbox; drivecombobox1: tdrivecombobox; button2: tbutton; procedure button1click(sender: tobject); procedure button2click(sender: tobject); private { private declarations } public procedure findfiles(apath:string;afile:string); { public declarations } end; var form1: tform1; targetfiles:string; implementation {$r *.dfm} procedure tform1.button1click(sender: tobject); begin screen.cursor:=crhourglass; try listbox1.clear; targetfiles:=labelededit1.text; findfiles(directorylistbox1.directory,targetfiles); finally screen.cursor:=crdefault; end; end; procedure tform1.findfiles(apath,afile:string); var findresult:integer; fsearchrec,dsearchrec:tsearchrec; function isdirnotation(adirname:string):boolean; begin result:=((adirname='.') or (adirname='..')); end; begin if apath[length(apath)]<>'\' then apath:=apath+'\'; findresult:=findfirst(apath+afile,faanyfile+fahidden+fasysfile+fareadonly,fsearchrec); try while findresult=0 do begin listbox1.items.add(fsearchrec.name); findresult:=findnext(fsearchrec); end; findresult:=findfirst(apath+'*.*',fadirectory,dsearchrec); while findresult=0 do begin if((dsearchrec.attr and fadirectory)= fadirectory) and not isdirnotation(dsearchrec.name) then findfiles(apath+dsearchrec.name,targetfiles); findresult:=findnext(dsearchrec); end; finally findclose(fsearchrec); end; end; procedure tform1.button2click(sender: tobject); begin listbox1.items.add('aa'); end; end.
发表于:2008-01-20 19:05:191楼 得分:10
没发现楼主所说情况。

findfiles函数中有一行要修改一下(与楼主所描述的情况无关):
delphi(pascal) code
while findresult=0 do begin if((dsearchrec.attr and fadirectory)= fadirectory) and not isdirnotation(dsearchrec.name) then findfiles(apath+dsearchrec.name,targetfiles); findresult:=findnext(dsearchrec); end;


修改成:
delphi(pascal) code
while findresult=0 do begin if((dsearchrec.attr and fadirectory)= fadirectory) and not isdirnotation(dsearchrec.name) then findfiles(apath+dsearchrec.name,afile); //此处进行了修改 findresult:=findnext(dsearchrec); end;
发表于:2008-01-20 20:19:562楼 得分:0
还是一样的,没有变,这个文件一样会被查出来,是不是findfirst和findnext自身的原因
发表于:2008-01-20 20:28:593楼 得分:0
有谁能帮我看看吗?就没有一个能解释原因吗?高手们
发表于:2008-01-20 21:31:044楼 得分:10
因为findfirst   会使用8.3格式匹配,所以会匹配成功   如aaaaaaaa.txt   为   aaaaaa~1.txt


快速检索

最新资讯
热门点击