目录遍历的问题
在写一个目录遍历的东西,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




