目录上ifstream :: ifstream的行为是否定义明确?

时间:2018-10-10 16:07:23

标签: c++ c++11 language-lawyer

根据C ++ 11标准,是

的行为
ifstream in(".");

已指定,还是取决于系统?

对于上下文,我试图避免使用boost::filesystem和类似的库,因为它们会引起不相关的可移植性问题。

编辑:根据我所能找到的,我应该得到一个有效的ifstream(当且仅当该目录存在时,它才是'good()'。这可能比使用方式提供了一种更便携式的测试目录是否存在的方式boost::filesystem,因为后者需要您链接到更多库。

2 个答案:

答案 0 :(得分:2)

该标准似乎在其散文的任何地方都没有提及“目录”的概念。这里提到了EISDIR errno和镜像posix的一般意图,但是仅“可以用来报告低级状态”。我会说依赖系统而不是可移植的。

答案 1 :(得分:0)

  

根据我能找到的内容,我应该得到一个有效的ifstream(当且仅当该目录存在时,该名称为good()

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

当您限于使用C ++ 11时,最好的选择是使用平台相关的API调用,并用适当的预处理器宏将其包围。

#if  defined(_WINDOWS)
// Use Windows specific APIs
#elif defined(_Linux)
// Use Linux specific APIs
#elif defined(_MacOS) ???
// Use MacOS specific APIs
#endif

更多信息:

对于Windows:How do you check if a directory exists on Windows in C?
对于Linux:Checking if a directory exists in Unix (system call)