如何在調用C中的readdir()時檢查ent.d-> name是否爲文件或目錄,其中ent的類型爲struct dirent *。在C中的readdir()中標識目錄
回答
這就是S_ISREG()
和S_ISDIR()
與stat(2)
一起使用。詳情請見手冊頁。
如果您的生活環境不完全符合POSIX標準,您可以分別使用DT_REG()
和DT_DIR()
來檢查目錄性與規則性。這在readdir(3)
的手冊頁中提到。
您可能想使用'lstat',而不是'stat'。 (你是否假設OP在詢問Linux?) – 2013-03-22 14:24:06
爲什麼?該選擇取決於您是要識別符號鏈接還是遵循它們。 – 2013-03-22 14:51:38
@DavidSchwartz另外,手冊頁提到了兩者,並解釋了它們之間的區別。無論如何,這個答案本身並不足以寫出整個代碼(而且這個答案是在問題仍在SuperUser上時寫的)。 – 2013-03-22 14:55:38
另一種方法是嘗試調用執行opendir()在d_name,看是否返回null:
int isDir(struct dirent *ent)
{
if (ent && strcmp(ent->d_name, ".") && strcmp(ent->d_name, "..")) // don't include pwd and parent dir
{
DIR *isDir = opendir(ent->d_name);
if (isDir)
return 1;
}
return 0;
}
你應該在某個時候關閉DIR ... – DanZimm 2013-03-22 15:16:44
假設POSIX,readdir()已經返回OP所要求的信息,所以opendir()在最好的情況下是多餘的,最壞的情況是懲罰。 – 2013-03-22 15:21:26
- 1. 我如何獲得readdir忽略C/C++中的目錄?
- 2. 在目錄中找不到標識符
- 3. C在chdir之後的readdir中的segfault
- 4. 目標中的目錄大小C
- 5. 目標中的文檔目錄C
- 6. 在目標C中使用未聲明的標識符
- 7. 在C函數中未識別的目標C對象
- 8. Segfault調用readdir() - 目錄遍歷
- 9. 唯一標識符(長)在目標c中
- 10. C++中的空白標識
- 11. 未聲明的標識符目標C
- 12. 目錄中的C +
- 13. iOS:在目標文件中指定.xcconfig文件中的代碼標識標識
- 14. 爲什麼Perl的readdir()緩存目錄條目?
- 15. 目標C/C中的聲音模式識別
- 16. 在目標c中的nsstring
- 17. php的readdir函數能在一個目錄中使用100萬個文件嗎?
- 18. 在發佈項目時在ASP.NET C#中獲取用戶標識
- 19. 目錄在Python中未被識別
- 20. AuthZ的目錄標識符不支持
- 21. 閱讀目錄(readdir)和目錄上的查找操作之間的區別
- 22. 在C++中刪除目錄
- 23. 在C中瀏覽目錄#
- 24. 在C++中執行目錄
- 25. C,C++中__func__標識符的用例?
- 26. 在目標C中實現標頭C
- 27. 預計標識符或 '(' 目標C
- 28. 目標C使用了標識*
- 29. 在新目標中未識別IBOutlet
- 30. 函數在目標中未被識別-C
我注意到你有一個(因此)帳戶。編程問題在那裏。如果由於某種原因,您無法在此發佈信息,例如由於問題禁止,那麼沒有理由在此發佈編程問題。 – 2013-03-22 13:58:09