2014-12-02 69 views
2

我正在編寫一個C++代碼,遍歷目錄中的所有條目並決定使用dirent.h。自從我使用C++以來,我決定使用C++標準來包含C庫文件[即在庫名前加上c並在最後刪除.h]爲什麼沒有cdirent或sys/cstat

不添加任何功能,我決定編譯我的程序一次,看看是否實際存在cdirentsys/cstat。 G ++扔了一個錯誤,告訴我,這些文件,其中不存在

#include <iostream> 
#include <cdirent> 
#include <sys/cstat> 
#include <sys/ctypes> 

using namespace std; 

int main() 
{ 

} 

dummy.cpp:2:19: error: cdirent: No such file or directory 
dummy.cpp:3:21: error: sys/cstat: No such file or directory 
dummy.cpp:4:22: error: sys/ctypes: No such file or directory 

繼此page在哪裏尋找標準C++頭文件所提出的意見,我可以找到cstdiocstdlibctime和這使我對像我的問題

  1. 何時將C標準庫文件轉換爲C++標準庫文件?
  2. 如何在程序中包含這些文件?這裏的page只是談論標準和非標準的頭文件。但我相信dirent.h是一個標準庫文件[糾正我,如果我錯了]

預先感謝所有建議

+1

而不是Posix文件,使用Boost文件系統。 Boost文件系統在C++ 14(當前標準)中被包含在標準庫中,但我記得它並沒有被添加。它肯定會在C++ 17中出現,然後希望將這些愚蠢的東西移除。 – 2014-12-02 05:31:14

回答

5

dirent.hsys/stat.h是POSIX/SUS頭,而不是標準的C/C++頭,因此不符合標準的C++規則。

+0

他們也將C++標準預編了十年甚至更久。至於爲什麼POSIX沒有定義C++接口,這是一個更難回答的問題。也許應該鼓勵Boost做到這一點? – 2014-12-02 05:33:41

+0

@JonathanLeffler:Boost已經有了一個文件系統子庫。 – 2014-12-02 07:05:39