关于c ++:ifstream :: ifstream在目录上的行为是否定义明确?

Is the behaviour of ifstream::ifstream on directories well-defined?

根据C++ 11标准,是行为的

1
ifstream in(".");

指定,还是依赖于系统?

在上下文方面,我试图避免使用boost::filesystem和类似的库,因为它们会导致不相关的可移植性问题。

编辑:根据我能找到的,我应该得到一个有效的ifstream(如果并且只有当目录存在时才是'good()'。这可能提供了一种比使用boost::filesystem更可移植的方法来测试目录是否存在,因为后者要求您链接更多的库。


标准似乎没有在其散文中的任何地方提到"目录"的概念。这里提到了eisdir errno和镜像posix的一般意图,但仅"可用于报告低级条件"。我会说系统依赖,不可移植。


According to what I can find, I should get a valid ifstream (one that is good() if and only if the directory exists.

标准并不能保证这个结果。我不会将它用作检查目录是否存在的机制。

当您仅限于使用C++ 11时,您最好的选择是使用由适当的预处理器宏包围的依赖于平台的API调用。

1
2
3
4
5
6
7
#if  defined(_WINDOWS)
// Use Windows specific APIs
#elif defined(_Linux)
// Use Linux specific APIs
#elif defined(_MacOS) ???
// Use MacOS specific APIs
#endif

更多信息:

对于Windows:如何检查C中的Windows上是否存在目录?对于Linux:检查UNIX中是否存在目录(系统调用)