我知道我永远不应该开始使用c++ io,整个“类型安全”的论点是一团糟(有人真的发现这是他们最紧迫的问题之一吗?)。无论如何,我做到了,发现了ifstreams和FILE * s与普通旧文件描述符之间的奇怪区别:ifstreams无法从设备读取。谁能想到一个原因?

const char* path = "/dev/disk3";
char        b;

// this works
FILE* f= fopen(path, "rb");
int i = fread(&b, 1, 1, f);     // returns 1, success!

// this does not work
ifstream    cf(path, ios::binary);
cf.read(&b, 1);
bool        good = cf.good();   // returns false, failure.

最佳答案

对我来说效果很好,这似乎不是您想的C++流文件I / O固有的问题。

也许尝试将ios::in添加到openmode标志中。根据标准的27.8.1.6,它是ios::in或与ios::in一起使用所必需的,因此这可能什么都不做。

尝试检查实际设置的位-而不是调用good(),而是尝试分别检查bad(),eof()和fail()。这可能会提供有关错误原因的线索。

10-08 08:24
查看更多