根据C ++ 11标准,是
的行为ifstream in(".");
已指定,还是取决于系统?
对于上下文,我试图避免使用boost::filesystem
和类似的库,因为它们会引起不相关的可移植性问题。
编辑:根据我所能找到的,我应该得到一个有效的ifstream(当且仅当该目录存在时,它才是'good()'。这可能比使用方式提供了一种更便携式的测试目录是否存在的方式boost::filesystem
,因为后者需要您链接到更多库。
答案 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)