所以我得到了帮助,现在我有一个程序可以搜索当前目录并打印出文件(如果存在),现在我将如何制作它以便它通过一个不同的目录并在所有文件中搜索该文件它的子目录?
我想如果我更换了“。”使用“..”,它将返回到上一个目录,并考虑所有子目录,但它只查找目录中的文件而不进入子目录。
//headers here
char *FINDME=NULL;
int filter (const struct dirent *p){
int retval=0;
if (fnmatch(FINDME,p->d_name, 0) == 0)
retval = 1;
return retval;
}
int main(int argc, char **argv){
struct dirent **namelist;
int i = 0;
FINDME = (argc > 1) ? argv[1] : "testfilename";
i = scandir("..", &namelist, filter, alphasort);
if(i < 0){
perror("scandir");
exit(1);
}
while(i--){
printf("%s\n", namelist[i]->d_name);
free(namelist[i]);
}
free(namelist);
return 0;
}
答案 0 :(得分:1)
浏览文件系统实际上是通过树(不包括硬编号和符号链接),因此您可以使用递归方式:
以下伪代码会给你一个想法:
Function TravelDirectory (String dirname, String filename)
Foreach item=Element in dirname Do
If item.type is File AND item.name==filename
Print item
Else If item.type is Directory
TravelDirectory (item.name, filename)
EndFor
EndFunction
例如,要在Linux下的C中实现此功能,您可以使用opendir()
和readdir()
函数代替scandir()
。 readdir()
将为您提供Foreach
部分的迭代器。
答案 1 :(得分:0)
我不是100%肯定,但您尝试过通配符或添加尾部斜杠
你有..
尝试../ 要么 ../*