CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

目录遍历的问题

楼主ed9er(始祖鸟)2001-06-15 16:24:00 在 C/C++ / C语言 提问

在写一个目录遍历的东西,unix下的好办,打开目录然后一个个fnmatch,但在WIN32下只能用FindFirstFile和FindNextFile,如果参数里最后的文件名是*.cpp,那么除非目录名也是xxx.cpp,否则目录名不会返回,无法完整遍历,所以……  
   
  WIN32下面有没有类似fnmatch的函数?或者是谁有fnmatch的源码,工作里用的,如果自己写的话,遇到*就往后跳任意个字符进行匹配,可能也就是简单的循环加递归吧,但是总是不放心:(  
   
  问题点数:100、回复次数:11Top

1 楼holyfire(谁最衰啊你最衰,谁最帅啊我最帅)回复于 2001-06-15 16:39:00 得分 0

没有这个函数  
   
  不过你可以遍历*.*然后和.cpp比较啊Top

2 楼ed9er(始祖鸟)回复于 2001-06-15 16:45:00 得分 0

就是这个意思,给FindFirstFIle的参数改成*,然后再把结果里面的东西和通配符字符串*.cpp比较,所以需要fnmatch这个函数  
   
  反正分都给出来了,抓bug吧,抓到1个100分,抓到两个一人50……   :)))  
   
  static   bool   _fnmatch(const   char*   mask,   const   char*   name)   {  
   
          while   (*mask)   {  
                  if   (*mask   ==   '*')   {  
                          mask++;  
                          if   (*mask)   {  
                                  while   (*name)  
                                          if   (_fnmatch(mask,   name++))  
                                                  return   true;  
                          }   else  
                                  return   true;  
                  }  
                  if   ((*mask   ==   '?'   &&   *name)   ||   *mask   ==   *name)   {  
                          mask++;  
                          name++;  
                  }   else  
                          return   false;  
          }  
          return   *name   ==   '\0';  
  }Top

3 楼ed9er(始祖鸟)回复于 2001-06-15 16:55:00 得分 0

@_@     自己已经看到一处了Top

4 楼holyfire(谁最衰啊你最衰,谁最帅啊我最帅)回复于 2001-06-15 17:04:00 得分 20

if   (*mask   &&   *name)   {   //这里吧  
                                  while   (*name)  
                                          if   (_fnmatch(mask,   name++))  
                                                  return   true;  
                          }   else  
                                  return   true;  
  Top

5 楼ed9er(始祖鸟)回复于 2001-06-15 18:17:00 得分 0

应该是这样:  
   
  if   (*mask)   {  
          while   (*name)  
                  if   (_fnmatch(mask,   name++))  
                          return   true;  
          return   false;  
  }   else  
          return   true;Top

6 楼ed9er(始祖鸟)回复于 2001-06-16 20:28:00 得分 0

up  
  再来人抓两个bug吧  
  我不想把100分都给这个家伙   :)Top

7 楼taosi(桃子)回复于 2001-06-16 20:35:00 得分 0

寸下先,慢慢的看~~~~~~~~~~`Top

8 楼wdhmm1(wdhmm1)回复于 2001-06-16 20:50:00 得分 0

果然错误很多!Top

9 楼ed9er(始祖鸟)回复于 2001-06-16 21:48:00 得分 0

你倒是一个个讲噻,不急Top

10 楼brianchon()回复于 2001-06-17 03:02:00 得分 80

这个我拿手呀!再贴一边  
   
  bool   _fnmatch(const   char*   mask,   const   char*   name)   {  
          return   (*mask   ==   0   &&   *name   ==   0)  
                  ||   (*mask   ==   '*'   &&   (_fnmatch(mask+1,   name)   ||   (*name   &&   _fnmatch(mask,   name+1))))  
                  ||   (*mask   ==   '?'   &&   *name   &&   _fnmatch(mask+1,   name+1))  
                  ||   (*mask   ==   *name   &&   _fnmatch(mask+1,   name+1));  
  }Top

11 楼ed9er(始祖鸟)回复于 2001-06-17 13:09:00 得分 0

!!!!Top

相关问题

  • 遍历ftp目录
  • 如何遍历目录...
  • 如何遍历目录?
  • 遍历目录的问题
  • java中遍历目录?
  • 如何目录遍历?
  • 关于遍历目录的问题?
  • 遍历目录+读MP3信息!
  • 如何遍历深层目录?
  • 怎么遍历一个磁盘目录

关键词

  • win32
  • 函数
  • cpp
  • fnmatch
  • 遍历
  • mask
  • 目录
  • const char
  • true
  • else

得分解答快速导航

  • 帖主:ed9er
  • holyfire
  • brianchon

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

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