2015-04-03 119 views
0

所以我得到了帮助,现在我有一个程序可以搜索当前目录,并在文件存在的情况下打印出来,现在我怎样才能使它通过一个不同的目录并在它的所有子目录中搜索该文件?在一个目录内搜索所有的子目录

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

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

我不是100%肯定,但你尝试过通配符或添加尾随斜线

你..

尝试../ OR ../*

+0

我只是试过../*,它不通过子目录,我只是得到“scandir:没有这样的文件或目录” – MoistyTacos 2015-04-03 19:25:04

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 

在C实现这个Linux下,例如,你可以用它代替scandir()opendir()readdir()功能。 readdir()将为您提供Foreach部分的迭代器。

+0

好吧,我会尝试,谢谢 – MoistyTacos 2015-04-03 19:30:08