回答
檢查d_type
是D_DIR
。
它不符合POSIX標準。 – pic11
@ pic11,看到我對巴西爾的回答的評論。 –
使用'd_type'是可能比調用'stat'爲每項快約50-1000倍,但你可能應該包括系統回退代碼,其中'd_type'不存在,或在情況下,它沒有填寫。 –
您也可以計算在目錄中的每個條目的路徑(但也許你可以跳過.
& ..
項),並使用stat系統調用路徑上。
如果您需要路徑上的更多信息(例如,修改時間,大小...),這非常有用。
對於不支持'd_type'的系統,它可能也很有用,但由於問題被標記爲'linux' ,這是不太可能成爲問題的。 –
沒有必要計算路徑。 (至少,不在Linux上> 2.6.16)由於使用了readdir,因此已經有一個開放的dirent,所以你可以使用fstatat和d_name中給出的相對路徑。 (使用dirfd()來獲取fd)。 –
是的,你是對的。但我會相信'fstatat'可能不太方便。 –
的dirent包含一個成員d_type可以計算爲0x8中,如果它是一個文件,所以:
struct dirent *DirEntry;
...
if (DirEntry->d_type == 0x8)
//is a file
這取決於,在標準的「POSIX」 READDIR操作不必領域d_type
根據POSIX,dirent結構包含未指定大小的字段char d_name [],最多NAME_MAX個字符在終止空字節之前。 POSIX.1-2001還將字段ino_t d_ino記錄爲XSI擴展。使用其他>字段會損害程序的可移植性。
「標準方法」是做一個LSTAT呼叫你的文件/目錄,並檢查struct stat中的st_mode字段,如果你的ST_MODE比賽S_ISDIR,你有一個目錄。
- 1. 我怎麼知道哪一個是用於創建文件夾
- 2. iPhone - 我怎麼知道一個URL是否是一個資源文件?
- 3. 多的AsyncTask - 我怎麼知道它是哪一個「onPostExecute」
- 4. Perl參考。我們怎麼知道它是一個?
- 5. 我怎麼知道它是複選框或它是無線電?
- 6. 我怎麼知道gcc的版本是64位還是32位?
- 7. Django pre_save信號:我怎麼知道它是插入還是更新
- 8. 我怎麼知道一個對象是否是唯一的
- 9. 小python項目 - 不知道它是我還是visual studio
- 10. 我怎麼能知道從「LS」的目錄是一個符號鏈接?
- 11. 在multimap中遍歷一個組我怎麼知道我是在第一個還是最後一個元素?
- 12. 當我得到一個mouseDragged事件時,我怎麼才能知道它是拖動一個窗口還是一個文件?
- 13. 我怎麼知道什麼TextView是clickbale?
- 14. 鑑於經緯度,我怎麼知道它是否是日光?
- 15. 給定一個包,我怎麼知道它的artifactId應該是什麼?
- 16. 如果我知道一個類,我怎麼知道它來自哪個jar?
- 17. java - 我有一個Date()。我怎麼知道它是否在HH:MM之後?
- 18. 我怎麼知道哪個xib是第一個加載的?
- 19. 我怎麼知道我的hadoop配置參數io.sort.factor是太小還是太大?
- 20. 我怎麼知道QTreeView是空的?
- 21. 我怎麼知道流是結束?
- 22. 知道一個目錄中的文件是否已被修改
- 23. 我怎麼知道一個屬性是否是一個通用集合
- 24. 我是一個標題,不知道該怎麼辦
- 25. 給定一個字符串,我怎麼知道它是否需要解碼
- 26. 我怎麼能知道,如果它是一個絕對的域名用PHP
- 27. 有一個.exe的路徑,我怎麼知道它是否在運行?
- 28. 如何知道我使用的是什麼django版本?它是1.0,1.1還是1.2?
- 29. 怎麼OS知道文件
- 30. iPhone Facebook Messanger - 它怎麼知道我是誰?
我不確定'readdir'在iOS應用程序中是否可用。無論如何,在該平臺上,通過使用NSFileManager和可以識別目錄的'-fileType'輔助方法可以更好地服務。 –
研究之後,似乎'readdir'可以在iOS上使用,但是在iOS 4.x上有一些錯誤實現:https://devforums.apple.com/message/251591。我仍然建議爲此使用NSFileManager的更高級抽象。 –