Why is there no cdirent or sys/cstat

4
我正在编写一个C++代码,遍历目录中的所有条目,并决定使用dirent.h。由于我使用的是C ++,因此决定使用包含C库文件的C ++标准[即在库名称前加上c并去掉末尾的.h]。
在没有添加任何功能的情况下,我决定编译我的程序一次,看看是否有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

按照此页面上给出的建议寻找标准C++头文件,我找到了cstdiocstdlibctime等文件,这就引出了我的问题:

  1. 何时将C标准库文件转换为C++标准库文件?
  2. 如何在程序中包含这些文件?此页面只讨论了标准和非标准头文件。但我认为dirent.h是一个标准库文件(如果我错了,请纠正我)。

提前感谢所有的建议。


1
不要使用Posix文件,而是使用Boost文件系统。Boost文件系统原本计划在C++14(当前标准)的标准库中包含,但据我所知它并没有被添加进去。它肯定会出现在C++17中,并且希望那些愚蠢的错误已经被修复了。 - Cheers and hth. - Alf
1个回答

5

dirent.hsys/stat.h不是标准的C/C++头文件,而是POSIX/SUS头文件,因此它们不遵循标准C++规则。


它们比C ++标准早十多年。至于为什么POSIX还没有定义C ++接口,这是一个更难回答的问题。也许应该鼓励Boost来实现它? - Jonathan Leffler
@JonathanLeffler:Boost已经有一个文件系统子库了。 - Cheers and hth. - Alf
如何包含它们?我需要用 extern "C" 或其他方式来包装它们吗? - ivan_pozdeev
@ivan_pozdeev 不是的。顺便说一下,C++17及以后版本中有文件系统库。 - kingsjester

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接