2014-12-02 66 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