目录遍历的问题

ed9er 2001-06-15 04:24:00
在写一个目录遍历的东西,unix下的好办,打开目录然后一个个fnmatch,但在WIN32下只能用FindFirstFile和FindNextFile,如果参数里最后的文件名是*.cpp,那么除非目录名也是xxx.cpp,否则目录名不会返回,无法完整遍历,所以……

WIN32下面有没有类似fnmatch的函数?或者是谁有fnmatch的源码,工作里用的,如果自己写的话,遇到*就往后跳任意个字符进行匹配,可能也就是简单的循环加递归吧,但是总是不放心:(

...全文
130 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
brianchon 2001-06-17
  • 打赏
  • 举报
回复
这个我拿手呀!再贴一边

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));
}
ed9er 2001-06-17
  • 打赏
  • 举报
回复
!!!!
ed9er 2001-06-16
  • 打赏
  • 举报
回复
你倒是一个个讲噻,不急
wdhmm1 2001-06-16
  • 打赏
  • 举报
回复
果然错误很多!
taosi 2001-06-16
  • 打赏
  • 举报
回复
寸下先,慢慢的看~~~~~~~~~~`
ed9er 2001-06-16
  • 打赏
  • 举报
回复
up
再来人抓两个bug吧
我不想把100分都给这个家伙 :)
ed9er 2001-06-15
  • 打赏
  • 举报
回复
应该是这样:

if (*mask) {
while (*name)
if (_fnmatch(mask, name++))
return true;
return false;
} else
return true;
holyfire 2001-06-15
  • 打赏
  • 举报
回复
if (*mask && *name) { //这里吧
while (*name)
if (_fnmatch(mask, name++))
return true;
} else
return true;
ed9er 2001-06-15
  • 打赏
  • 举报
回复
@_@ 自己已经看到一处了
ed9er 2001-06-15
  • 打赏
  • 举报
回复
就是这个意思,给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';
}
holyfire 2001-06-15
  • 打赏
  • 举报
回复
没有这个函数

不过你可以遍历*.*然后和.cpp比较啊

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧