2015-04-03 88 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