C++ ifstream::ifstream在目录上的行为是否定义良好?

C++ ifstream::ifstream在目录上的行为是否定义良好?,c++,c++11,language-lawyer,C++,C++11,Language Lawyer,根据C++11标准,是 ifstream in("."); 指定的,还是依赖于系统 在上下文中,我试图避免使用boost::filesystem和类似的库,因为它们会导致不相关的可移植性问题 编辑:根据我能找到的,我应该得到一个有效的ifstream(一个'good()'当且仅当目录存在时。这可能提供一种比使用boost::filesystem更方便的方法来测试目录是否存在,因为后者要求您链接更多的库。标准似乎没有提到“目录”的概念在文章的任何地方。都提到了EISDIR errno和镜像pos

根据C++11标准,是

ifstream in(".");
指定的,还是依赖于系统

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


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

标准似乎没有提到“目录”的概念在文章的任何地方。都提到了EISDIR errno和镜像posix的一般意图,但只是“可能用于报告低级别条件”。我要说的是系统依赖性和不可移植性。

该标准似乎没有提到“目录”的概念在文章的任何地方,都提到了EISDIR errno和镜像posix的一般意图,但只是“可能用于报告低级别条件”。我要说的是系统依赖性和不可移植性

根据我能找到的,我应该得到一个有效的
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:
对于Linux:

根据我能找到的,我应该得到一个有效的
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:

对于Linux:

你希望它做什么?目录是UNIX上的一个文件。请参阅@ NaNaLover。我有一个原因,我指定了C++ 11…抱歉,我没有看到标题中的标签。我已经编辑它来从标题中删除标签,而用C++标准标记Q,根本不提目录或UNIX。如果你想让程序在UNIX上工作。ES,您需要一些保证您在UNIX上的行为的东西。C++标准不是这样的文档。实际上,您可能得到一个<代码>()。流,如果你指定了代码> STD::iOSKBase::/<代码>作为开放模式。虽然你不可能从它得到任何好的代码<代码> Read /Cule> s。你希望它做什么?目录是UNIX上的一个文件。参见@ NaNaLover有一个我指定C++ 11的原因…抱歉,我没有看到标题中的标签。我已经编辑了它,从T中删除标签。It和相反,用C++标准标记Q根本不提目录或UNIX。如果你想让程序在UNIX上工作,你需要保证你在UNIX上的行为。C++标准不是这样的文档。实际上你可能得到一个<代码>()。流,如果你指定了代码> STD::IOSKASE::在/<代码>作为开放模式。虽然你不可能从它那里得到任何好的代码<代码> Read /Cule> s。委员会正在寻找纠正它的方法。有一个技术规范来解决它。编程语言-C++文件系统技术规范,但它看起来像它。没有进入C++17。@RichardChambers很有趣。这清楚地表明dir是一个文件。@Mohan最好把它想象成
文件系统
技术规范说
文件系统
函数将目录表示为一个文件。谁知道底层的操作系统操作系统在做什么,以及Stan是怎么做的DADR库跳过引擎盖下,以提供一个接口到该规范。委员会正在寻求纠正这一点。有一个技术规范来解决它。编程语言- C++文件系统技术规范,但它看起来好像没有进入C++ 17。g、 这清楚地表明dir是一个文件。@Mohan最好把它看作
文件系统
技术规范说
文件系统
函数将目录表示为一个文件。谁知道底层操作系统操作系统在做什么,以及标准库在后台跳转的顺序是什么提供该规范的接口。