CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

查找给定文件夹下的全部文件,递归调用堆栈溢出

楼主Crystal_MJ()2006-03-03 09:54:40 在 VB / 基础类 提问

小弟用FindFirstFile,FindNextFile,和FindClose这三个API,写了一个函数  
  FindFiles(strFolder   as   String),查找strFolder下的所有文件,当我递归调用FindFiles时出现了堆栈溢出,请问各位大大怎么解决这个问题  
  还有无更好的办法/算法,检索文件  
  谢谢  
   
  以下是基本思路  
   
  Sub   FindFiles(strFolder   as   String)  
  ..............  
  .............  
   
  If   this   is   a   dir  
  strFolder=strFolder+dir  
  FindFiles(strFolder)  
  else    
  collectionFiles.add   File.name   or   strFolder+File.name  
  ....................  
  End   Sub 问题点数:60、回复次数:9Top

1 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-03 10:00:14 得分 50

'获取某目录下的所有子目录路径及名称和文件的路径及名称  
  Public   Sub   SeachFile(ByVal   strPath   As   String)  
          Dim   Fso   As   Object  
          Dim   Fol   As   Object  
          Dim   Fil   As   Object  
          Set   Fso   =   CreateObject("Scripting.FileSystemObject")  
          Set   Fol   =   Fso.GetFolder(strPath)  
           
          For   Each   Fil   In   Fol.Files  
                  Debug.Print   Fil.Path       '打印路径及文件名  
                  Debug.Print   Fil.Name       '打印文件名  
          Next  
          For   Each   Fol   In   Fol.subfolders  
                    Debug.Print   Fol.Path     '打印子目录的路径及名称  
                    Debug.Print   Fol.Name     '打印子目录的名称  
                    SeachFile   Fol  
          Next  
  End   Sub  
   
  Private   Sub   Command1_Click()  
          SeachFile   ("C:\Test\")  
  End   SubTop

2 楼DengXingJie(杰西)回复于 2006-03-03 11:17:57 得分 0

樓上的強!  
  如果要得出某文件夾下某類型的所有文件(如TXT文件)該如何做?Top

3 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-03 11:24:15 得分 0

to:   DengXingJie(杰西)  
   
  还是利用上面的方法,判断一下文件的扩展名,如果是txt,就取出来  
  ......  
  For   Each   Fil   In   Fol.Files  
          If   CreateObject("Scripting.FileSystemObject").GetExtensionName(Fil.Name)="txt"   Then   Debug.Print   Fil.Path       '打印路径及文件名  
  Next  
  ......  
  Top

4 楼feiyun0112(http://feiyun0112.cnblogs.com/)回复于 2006-03-03 11:29:12 得分 0

详细的代码  
   
  应该是进入死循环啦,最好跟一下  
   
   
   
  本人主要使用VB+MS   SQL,C#略知一二  
   
  如有相关问题需要帮助  
   
  可发短消息告知链接  
   
   
  Top

5 楼DengXingJie(杰西)回复于 2006-03-03 11:39:48 得分 0

謝謝faysky2()的指點,真是成分感激!!  
  也謝謝樓主的貼子Top

6 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-03 11:52:22 得分 5

For   Each   Fil   In   Fol.Files  
        这里加判断语句:  
              if   right(fil.name,3)=   "txt"   then  
                  Debug.Print   Fil.Path       '打印路径及文件名  
                  Debug.Print   Fil.Name       '打印文件名  
              end   if  
          Next  
  Top

7 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-03 11:58:03 得分 0

或者:  
     
  For   Each   Fil   In   Fol.Files  
        这里加判断语句:  
              if   Fil.Type=   "文本文档"   then  
                  Debug.Print   Fil.Path       '打印路径及文件名  
                  Debug.Print   Fil.Name       '打印文件名  
              end   if  
          Next  
  Top

8 楼AnnaBear(淡淡)回复于 2006-03-03 13:44:40 得分 5

根据faysky2()的基础上添加code改变如下:)  
  Option   Explicit  
  Public   Sub   SeachFile(ByVal   strPath   As   String)  
   
          Dim   Fso   As   Object  
          Dim   Fol   As   Object  
          Dim   Fil   As   Object  
          Dim   strName   As   String  
          Dim   i   As   String  
          Set   Fso   =   CreateObject("Scripting.FileSystemObject")  
          Set   Fol   =   Fso.GetFolder(strPath)  
           
  '         Fso.GetExtensionName   ("C:\AUTOEXEC.BAT")  
   
          For   Each   Fil   In   Fol.Files  
                  Debug.Print   Fil.Path        
                   
                  Debug.Print   Fil.Name      
                  Fso.getextensionname   (Fil.Name)  
  '                 Debug.Print   Fso.getextensionname(Fil.Name)  
                  If   Fso.getextensionname(Fil.Name)   =   "txt"   Then---------------------此处改动  
                          strName   =   Mid(Fil.Name,   1,   InStr(1,   Fil.Name,   ".")   -   1)  
                          Debug.Print   strName  
                  End   If-------------------------------------------------------------此处改动  
          Next  
          For   Each   Fol   In   Fol.subfolders  
                    Debug.Print   Fol.Path      
                    Debug.Print   Fol.Name      
                    SeachFile   Fol  
          Next  
  End   Sub  
   
  Private   Sub   Command1_Click()  
          SeachFile   ("C:\Test\")  
  End   Sub  
   
  Top

9 楼fifaboy00(18哥)回复于 2006-03-03 14:12:36 得分 0

是不是这种搜索都是类似递归的呢?  
        我感觉这种方法仍然在使用了大量的栈,同样也调用了自己本身啊。Top

相关问题

  • deltree命令如何递归删除所有子文件夹?
  • 如何用递归实现服务器端文件夹删除?
  • 关于递归中堆栈的问题???
  • 如何用递归显示某文件夹里的文件包括子文件夹里的文件
  • 怎样使用FTP递归获取文件夹下的所有文件及子文件夹?
  • 如何递归删除文件夹下所有制定文件名的文件
  • 给定文件的完整路径,如何判断文件夹是否存在?
  • 救急:如何用Cfilefind得到给定文件夹中子文件的路径
  • 如何得到给定目录下的所有文件夹的名字?
  • 不用递归的办法,怎么把一个文件夹里的目录结构写到一个树里面?

关键词

  • 文件名
  • 文件
  • 打印
  • debug
  • fol
  • fil
  • 路径
  • seachfile
  • 调用
  • strfolder

得分解答快速导航

  • 帖主:Crystal_MJ
  • faysky2
  • ZOU_SEAFARER
  • AnnaBear

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo