搜索目录中的所有子目录

时间:2015-04-03 19:14:03

标签: c file search directory

所以我得到了帮助,现在我有一个程序可以搜索当前目录并打印出文件(如果存在),现在我将如何制作它以便它通过一个不同的目录并在所有文件中搜索该文件它的子目录?

我想如果我更换了“。”使用“..”,它将返回到上一个目录,并考虑所有子目录,但它只查找目录中的文件而不进入子目录。

//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;
}

2 个答案:

答案 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%肯定,但您尝试过通配符或添加尾部斜杠

你有..

尝试../ 要么 ../*