2011-06-28 47 views
-2

C,在LINUX環境中遞歸地瀏覽文件和目錄 我的功能foo工作,除非目錄中有文件(我的功能的誰點是列出當前DIR中的所有文件)。遞歸c文件列表_ stat()函數失敗的文件內的目錄

它不打印任何目錄內的文件,因爲

if((err=stat(full_child_entity_path,childStat)) <0) 

失敗。我已經有這個問題好幾天了。任何人都可以嘗試解釋爲什麼此功能 失敗?

注意:我具有所有文件和目錄的完全訪問權限,文件/目錄具有完整的權限。

感謝先進!

int foo(char* dir_location) 
{ 

    if((err=stat(full_child_entity_path,childStat)) <0) 
    { 
    printf("Some sort of error with getting file stat %d <%s>\n",err,childDirent->d_name); 
    } 
    opendir() 
    while {readdir()!=null} 
    if(strcmp(childDirent->d_name,".")==0 || strcmp(childDirent->d_name,"..")==0) continue; 

    if(S_ISREG(childStat->st_mode)) printf("name of file"); 
    else if(S_ISDIR(childStat->st_mode)) foo("concatinate dir_location+"/"+childDirent->name); 
} 
+7

此代碼不可編譯。它真的是你有錯誤的代碼嗎?請複製並粘貼,不要從內存中重新輸入。 – bdonlan

+1

當像'stat()'這樣的函數失敗時,使用'perror(「stat」);'將錯誤輸出到'stderr'。 – caf

回答

1

我認爲這是因爲你忽略函數readdir()(除了空檢查)的返回值。它實際上會返回您後面提到的孩子dirent。其次,你也忽略了opendir()的返回值,它給你一個成功調用readdir(...)的目錄。

+0

嗨,霍華德。謝謝回覆。
我只是想通了。在遞歸調用中,我忘了附加一個額外的「/」。目錄路徑讀取「/ dir1/file1」而不是「/ dir/file1 /」。所以,如果你的dirent孩子是一個目錄,我必須用一個額外的「/」來調用它。這解決了我的問題。 – Alejandro

+2

@Alejandro,這正是我要求你複製粘貼而不是從記憶中重新輸入的原因。當你重新輸入時,你在這個過程中修正了這個錯誤,使任何人都無法幫助你。同時,你引入了大量的bug(你不能在C中用'+'添加字符串!)。所以在將來,請複製並粘貼您的確切代碼; _不要重新輸入。 – bdonlan

相關問題