【发布时间】:2022-01-23 03:29:00
【问题描述】:
在 Windows(使用 gcc)上,下面的代码按预期打印0 0如果传递的文件名是现有目录的路径,即没有实际文件的路径(实际上,没有文件可以打开阅读)。
在 Mac(使用 Xcode)上,它会打印 1 1!怎么可能?为什么good() 和is_open() 在Mac 上都返回true? Xcode clib 有问题,还是我忽略了一些细节?
#include <fstream>
int main(void)
{
std::ifstream file("filename", std::ios::binary);
cout << file.good() << " " << file.is_open();
}
【问题讨论】:
-
如果您使用
std::ios::binary | std::ios::in,它会告诉您什么(在 Mac 上)? -
@rturrado -- 没关系;
std::ifstream是一个输入流,即使您指定了其他选项。 -
@PeteBecker 正确,谢谢!
-
我怀疑某些基于 Unix 的系统允许您成功打开文件夹的句柄,就好像它是一个普通文件一样。您可以使用
std::filesystem::is_directory来检查路径是否为文件夹。 -
如果您有一个名为
filename的目录,在某些操作系统上,您可以打开该目录作为文件 并从中读取。它将包含其内容项(以二进制格式)。这就是你想要做的吗?