2015-04-02 53 views
-2

你好,我希望有一些幫助,使一個c程序,查找目錄中的文件。它會將目錄和文件名稱作爲參數,並使用stat來獲取文件的屬性。我希望輸出顯示找到的文件的路徑以及其中包含文件名的其他路徑。在目錄樹中搜索一個文件

我已經看過dirent.h來訪問目錄,但我不太清楚如何正確使用它來查找它中的文件。

+0

而操作系統是什麼? – 2015-04-02 16:41:03

+0

os是unix。 – MoistyTacos 2015-04-02 21:50:38

回答

0
char *FINDME=NULL; 

int filter (const struct dirent *p) 
{ 
    int retval=0; 
    if (fnmatch(FINDME,p->d_name, 0)==0) 
    retval=1; 
    return retval; 
} 
// scandir.c 
// scan the current directory "." 
// usage ./scandir filename 
// usage ./scandir 'filename*' 
int 
main(int argc, char **argv) 
{ 
    struct dirent **namelist; 
    int n=0; 
    FINDME=(argc>1)? argv[1] : "testfilename"; 
    n = scandir(".", &namelist, filter, alphasort); 
    if (n < 0) 
    { 
     perror("scandir"); 
     exit(1); 
    } 

    while (n--) 
    { 
      printf("%s\n", namelist[n]->d_name); 
      free(namelist[n]); 
    } 
    free(namelist); 

} 

你必須包括fnmatch.hdirent.h再加上平時的頭文件。 ​​允許使用像「*」這樣的「通配符」來選擇文件名。 alphasort()按字母順序排列名稱,並且是POSIX系統的一部分。 FNDME是全局字符串,因爲回調函數過濾器不接受任何指向直接結構的指針。

+0

哦,好的,謝謝 – MoistyTacos 2015-04-02 23:09:36

+0

現在我該怎麼做,如果我輸入一個文件名出現在多個地方,它會打印出現的每個地方? – MoistyTacos 2015-04-02 23:24:22