2015-05-13 100 views
0

我知道如何通過打開目錄"./"然後使用readdir從當前目錄中讀取所有文件。但是,如何僅列出.txt文件或任何其他特定的擴展名?如何列出當前目錄中的所有.txt文件?

DIR *p; 
    struct dirent *pp;  
    p = opendir ("./"); 

    if (p != NULL) 
    { 
    while ((pp = readdir (p))!=NULL) 
     puts (pp->d_name); 

    (void) closedir (pp); 
    } 
+5

按照您當前的方式循環訪問文件,並僅處理那些名稱以您選擇的特定擴展名結束的文件? – Chnossos

+1

結合'sscanf'使用'for'循環。你可以做一些事情,比如計算'。'的數量。字符在文件名中,那麼如果最後一個字符後的所有內容都讀取「txt」,則打印整個文件名。 – Gophyr

+2

我認爲你正在尋找http://linux.die.net/man/3/glob – mch

回答

2

只需在打印文件之前檢查文件名即可。

DIR *p; 
    struct dirent *pp;  
    p = opendir ("./"); 

    if (p != NULL) 
    { 
    while ((pp = readdir (p))!=NULL) { 
     int length = strlen(pp->d_name); 
     if (strncmp(pp->d_name + length - 4, ".txt", 4) == 0) { 
      puts (pp->d_name); 
     } 
    } 

    (void) closedir (p); 
    } 

順便說一句,你還對你dirent(PP)調用closedir()而不是你DIR *(P)。

+0

使用案例無關比較是不是更明智?或者這是否也取決於操作系統? (在Windows上,''.txt「==」.TXT「'但我自己的Mac有兩種模式 - 我永遠不會記得哪一個是爲了什麼。) – usr2564301

+0

@Jongware事實確實如此。 – fuz

相關問題