首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 学院论坛
精选专题 | 精美壁纸 | 专家答疑 | Flash剧场 | Photoshop | 名词解释 | 梦幻桌面 | PS高手进阶 | QQ区 | 图书 | 黑客教材
Flash教程| 卡通制作 | AutoCAD | 3DMax实例 | PS视频教程| 网页制作 | CorelDRAW| Firework | 滤镜与实例 | 全部视频教程
当前位置:eNet硅谷动力 > 学院频道 > VC

VC遍历整个目录树查找文件
2004-02-15 09:43 来源:eNet论坛
    
加入收藏  设为首页

  在应用程序的开发过程中,经常会遇到如何查找某一文件以确定此文件路径的问题。利用CFileFind类可以比较方便地在当前目录下进行文件查找,但却不能对其子目录中的文件进行搜寻。而实际应用中往往需要对某一整个目录树,甚至是整个C盘或D盘驱动器进行文件搜寻。通过实践,我们在Visual C++ 6.0中编程实现了如何遍历任意目录树,以查找某一特定的文件。

  在下面的具体陈述中可以看到,在确定要查找的文件名和要进行搜索的目录的名称后,将调用函数Search_Directory进行文件的查找。首先依次查找当前目录下的每一个实体(文件或是子目录),如果是某一子目录,则进入该子目录并递归调用函数Search_Dirctory进行查找,查找完毕之后, 再返回上一级目录;如果不是子目录而是某一文件,则判断其是否就是我们要查找的文件,如果是则输出其完整的文件路径。这样,通过Search_Directory函数的反复递归调用,就可以实现对整个目录,包括子目录的遍历搜索。下面将举例详细讲述如何在VC++中编程实现在整个目录树中的文件查找。

  1.在Visual C++ 6.0(VC++ 5.0与之类似)中用默认方式创建了一基于对话框的应用程序Search。在主窗口对话框上放置一命令按钮,其Caption为“Search File”,ID为ID—BUTTON—SEARCH。单击此按钮将完成文件的查找工作。

  2.利用ClassWizard为“Search File”按钮的BN_CLICKED 事件添加处理函数OnButtonSearch,代码如下:

  #include 〈direct.h〉
  #include 〈io.h〉
  ......

  void CSearchDlg::OnButtonSearch()
  {
  // TODO: Add your control notification handler code here
  char szFilename[80];

  // 字符串 szFilename 表示要查找的文件名   

  strcpy(szFilename,″Mytext.txt″);  

  _chdir(″d:\\″); // 进入要查找的路径(也可为某一具体的目录)

  // 查找文件, 如果查到则显示文件的路径全名 

  Search_Directory(szFilename);

  // 为CSearchDlg类的一成员函数   

  MessageBox(″查找文件完毕!″);

  // 显示查找完毕的信息

  }

  3.在CSearchDlg类中增加成员函数Search_Directory,它将完成具体的文件查找工作,代码如下:

  void CSearchDlg::Search_Directory(char* szFilename)
  {
  long handle;
  struct _finddata_t filestruct;

  //表示文件(或目录)的信息  

  char path_search[_MAX_PATH];

  //表示查找到的路径结果

  // 开始查找工作, 找到当前目录下的第一个实体(文件或子目录),

  // ″*″表示查找任何的文件或子目录, filestruct为查找结果  

  handle = _findfirst(″*″, &filestruct);

  // 如果handle为-1, 表示当前目录为空, 则结束查找而返回   

  if((handle == -1)) return;

  // 检查找到的第一个实体是否是一个目录(filestruct.name为其名称)   

  if( ::GetFileAttributes(filestruct.name) & FILE—ATTRIBUTE—DIRECTORY )

  {

  // 如果是目录, 则进入该目录并递归调用函数Search_Dirctory进行查找,

  // 注意: 如果目录名的首字符为′.′(即为″.″或″..″), 则不用进行查找   

  if( filestruct.name[0] != ′.′ )
  {
  —chdir(filestruct.name);
  Search_Directory(szFilename);

  // 查找完毕之后, 返回上一级目录   

  —chdir(″..″);
  }   
  }
  else // 如果第一个实体不是目录, 则检查是否是要查找的文件
  {
  // stricmp对两字符串进行小写形式的对比, 返回为0表示完全一致
  if( !stricmp(filestruct.name, szFilename) )
  {

  // 先获得当前工作目录的全路径

    —getcwd(path_search,—MAX—PATH);

  // 再获得文件的完整的路径名(包含文件的名称)
  strcat(path_search,″\\″);
  strcat(path—search,filestruct.name);
  MessageBox(path_search); //输出显示
  }
  }
  // 继续对当前目录中的下一个子目录或文件进行与上面同样的查找
  while(!(—findnext(handle,&filestruct)))
  {
  if( ::GetFileAttributes(filestruct.name) & FILE—ATTRIBUTE—DIRECTORY )
  {
  if(*filestruct.name != ′.′)
  {
  —chdir(filestruct.name);
  Search_Directory(szFilename);
  —chdir(″..″);
  }
  }
  else
  {
  if(!stricmp(filestruct.name,szFilename))
  {
  —getcwd(path—search,—MAX—PATH);
  strcat(path_search,″\\″);
  strcat(path_search,filestruct.name);
  MessageBox(path_search);
  }
  }
  }
  —findclose(handle);

  // 最后结束整个查找工作

  }

  这样我们就可以对整个目录进行遍历搜索,查找某一特定的文件,并输出显示其完整的文件路径。以上的程序在Visual C++ 6.0中已调试通过。


关键字:  
您对这篇文章的看法是:    喜欢 反感 支持 反对 加油 鄙视 学习 打击 佩服 漂亮 路过 发表评论
视频教程】 【专题汇总】 【不懂就问我关闭窗口

Photoshop绘制青翠欲滴的绿色植物
令人叹为观止的电影电视海报(一)
不容错过 小插件大幅减小系统负担
教你详细路由器基础中文命令集
马云新动作 淘宝将与阿里妈妈合并
焦点文章
 本栏目最新文章
·VC各类之间的调用函数总结
·VC中特殊字体的实现方法讲解
·VC++中进程与多进程管理的方法
·用VC 6.0实现串行通信的三种方法
·VC++实现回收站的文件存取
 精彩回放
·3DSMAX打造书本翻开效果
·共享上网技巧应用四则
·陪酒女浸泡在酒里的青春
·美女的性感靓丽婚纱设计
·妖冶身姿 死或生3壁纸
·剿灭Win XP下的29个烦恼
·黑客必备 NET命令大全
·用PS制作精致绝伦的红酒
 精彩推荐
 今日软件下载
·企业级即时通信平台 腾讯通RTX
·极品时刻表含春运临时列车数据
·下载管理器 BitComet 比特彗星
·边下边看想看就看风行网络电影
·超级图文影音转换器 Konvertor
 往日推荐
·手工破解网吧多种限制
·Windows 网络管理技巧
·WMP 10使用技巧三则
·女孩问你帅不帅 要小心
·注册表优化XP 20招
·制作XP万能ghost光盘
·WMP10火拼DVD播放器
·街头霸王图片集中营
·五大搜索引擎横向评测
·防御计算机病毒十大步骤

论坛精华
·PS初学者十三课,献给 
·原创:本人默哀作品 
·国外高手的调色合成 
·眼泪、五官、闪电、 
·图层蒙版中自定义形 
·Photoshop CS3打造迷 
热点推荐
打造绚丽北极光
麻辣动态签名
Flash视频编程
章子怡月历桌面
热点关注
·SEO从入门到精通视频教程
·Photoshop数码照片处理案例
·3DSMAX室内渲染实例视频教程
·鹏哥特色教程之C#入门到精通
·Dreamwaver CS3 视频教程
·JAVA-J2ME移动开发实战教学
·爱淘课Word2007精品视频教程
·瑞星杀毒08套装免费1年
·瑞星卡卡上网助手 正版免费
Photoshop打造乒乓球男团胜利瞬间
往日推荐
打造火焰文字
鹏哥C#教程
美女怀旧照片
3D室内渲染
焦点关注