我知道我永远不应该开始使用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()。这可能会提供有关错误原因的线索。