




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、含子目录的搜寻档案 标题:非递回、无使用界面的档案搜寻一般来说,搜寻目录及子目录底下符合条件之所有档案功能的程式撰写,一向颇令人头疼,而最後的解决方式多用recursive(程式递回呼叫)来解决,像所附的范例,就是filelistbox和recursive程序的兼用,来解决这个问题。本范例则用另一种思考模式切入,在不使用任何ocx及recursive程序下利用两个非固定阵列变数及双层do.loop回圈解决这问题。本范例代表的含意是你把这段code搬到无使用者可视界面的module及class里,一样可以执行(程式里的listbox及msgbox只是为了解说方便而已,实际的资料已放入filepa
2、ckage这个动态阵列里,可以index取用。)当然你不能拿windows95提供的寻找功能的搜寻速度来要求本范例,因为那根本是两种不同的驱动方式,但我用c:为搜寻启始目录,以*.*为条件来与的范例程式相比,是2分钟,我是分钟。更值得一提的是,其实整个搜寻动作在55秒时已全部完成,剩下的时间都是用来显示listbox资料。所以如果你的程式并不需要立即的显示查询结果,那麽本范例将比更适合你使用。最後如果你觉得本程式有任何错误或有改进的意见,请写信给站长,站长会转信给我,在此先谢谢你了。needalistbox,commandboxoptionexplicit宣告搜寻到的档案的储存阵列变数priv
3、atefilepackage()asstringprivatesubcommand1_click()宣告存放目录名称储存阵列变数dimdirpackage()asstring存放档案搜寻条件之字串dimsearchstringasstring接收dir()传回字串,并做为回圈判断的字串dimdirstringasstringi目前搜寻目录的指位器,j是dirpackage目录阵列之上限指标k是filepackage之档案阵列之上限指标dimiaslong,jaslong,kaslong把listbox的旧显示资料清掉把filepackage的上一次搜寻资料清掉erasefilepackage假
4、设我们的搜寻从c碟根目录开始redimdirpackage(0)路径结尾一定要加dirpackage(0)=c:假设我们的搜寻字串是*.exesearchstring=*.exe显示沙漏指标=11-以下搜寻c碟里所有的目录-直到目录指位器i超过目录上限指标j才结束搜寻dowhilei<=j搜寻目录指位器i所指的目录dirstring=dir(dirpackage(i),vbhiddenorvbdirectoryorvbreadonlyorvbsystem)直到目前目录找不到任何目录或档案才结束dowhiledirstring<>不要把上层目录和现目录的指标符号算进去ifdir
5、string<>.anddirstring<>.then如果找到的是个目录if(getattr(dirpackage(i)&dirstring)andvbdirectory)_=vbdirectorythen把目录上限加1j=j+1把储存目录名称的阵列加一个redimpreservedirpackage(j)把查到的新目录放在dirpackage新元素里dirpackage(j)=dirpackage(i)+dirstring+如果找到的是个档案else如果与搜寻字串相符合ifucase(dirstring)likeucase(searchstring)then
6、把储存档案名称的阵列加一个redimpreservefilepackage(k)把查到的新档案放在filepackage新元素里filepackage(k)=dirpackage(i)+dirstring把档案上限加1k=k+1endifendifendif继续找是否有符合的资料,并把结果放dirstring里dirstring=dirdoeventsloop把现目录指标往下移一个i=i+1loop-以下将结果输出到列示盒里-以下为找到档案之总计-还原滑鼠指标=0ifk=0thenmsgbox没有&searchstring&的档案else以下将结果输出到列示盒里fori=0to
7、ubound(filepackage)(i)doeventsnextmsgbox总共找到&ubound(filepackage)+1&个档案endifendsub以下有recursive作法,本人测试发现recursive的作法略快一些,原因可能出在redimpreservedirpackage与redimpreservesdirectorylist上,前者一直动态新增目录字串(如果c:之下含目录下的子目录一共100个,那这个阵列便会有100的大小),而後者recursive的作法则不同,它动态目录的最大值则是含有最大子目录数的那个目录中,子目录之数目(如:c:windows中
8、含最多子目录,其子目录有30个,且这30个是不含子目录下的子目录,则动态字串阵列的最大个数便只有30)needacommandboxprivatefoundfile()asstring存放传回值的字串阵列privatentxaslongprivatesubcommand1_click()ntx=0callgetdirpath(c:,*.ini)endsubprivatesubgetdirpath(currentpathasstring,byvalsearfileasstring)dimniasinteger,ndirectoryasinteger,iaslongdimsfilenameasst
9、ring,sdirectorylist()asstringfirstlistallnormalfilesinthisdirectorysfilename=dir(currentpath,vbhiddenorvbdirectoryorvbreadonlyorvbsystem)dowhilesfilename<>ifucase(sfilename)likeucase(searfile)theni=getattr(currentpath+sfilename)if(iandvbdirectory)=0thenredimpreservefoundfile(ntx)foundfile(ntx)=currentpath+sfilenamentx=ntx+1endifendififsfilename<>.andsfilename<>.thenignorenondirectoriesifgetattr(currentpath&sfilename)_andvbdirectorythenndirectory=ndirectory+1redimpreservesdirectorylist(ndirectory)sdirectorylist(ndirect
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳八上数学期中试卷及答案
- 商都二中考试卷及答案
- 肇庆市实验中学高中历史二:第四单元中国社会主义发展道路的探索测验评讲教案
- 2025挖掘机设备租赁合同样本
- 电动机制造中的绿色制造与环保标准考核试卷
- 箱包品牌社区运营策略考核试卷
- 硫化锌纳米复合材料制造技术考核试卷
- 2025金融科技合作合同范本
- sop考试试题及答案
- 糕点店产品质量监控与改进考核试卷
- 建筑消防设施检测记录表样本
- GA/T 2015-2023芬太尼类药物专用智能柜通用技术规范
- 【甘蔗自动剥皮切断机的设计10000字(论文)】
- 电子病历应用管理规范
- 用户思维培训课件
- 会员体系深度运营
- 省份简称课件
- 玻璃体腔注射-操作流程和注意事项(特选参考)课件
- 软件质量保证与测试技术智慧树知到课后章节答案2023年下青岛工学院
- 切片机安全操作保养规程
- 医生护士进修汇报康复科
评论
0/150
提交评论