我应该使用什么条件来停止文件读取循环?

Dav*_*vid 2 c++ file-io fstream

以下内容会导致错误,因为在读取超过文件末尾之前file.eof()显然不会返回true.我该怎么做?

std::ifstream file("something.stuff", std::ios::in|std::ios::binary);

while(!file.eof())
{
    double x, y, z;
    file.read(reinterpret_cast<char*>(&x), sizeof(x));  //  Do I need to check if(file) after every read?
    file.read(reinterpret_cast<char*>(&y), sizeof(y));
    file.read(reinterpret_cast<char*>(&z), sizeof(z));

    // Do something with xyz
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 8

您可以在所有读取后检查它,除非您打算对部分数据执行某些操作,因此:

while(true)
{
    double x, y, z;
    file.read(reinterpret_cast<char*>(&x), sizeof(x));
    file.read(reinterpret_cast<char*>(&y), sizeof(y));
    file.read(reinterpret_cast<char*>(&z), sizeof(z));

    if (!file)
        break;

    // Do something with xyz
}
Run Code Online (Sandbox Code Playgroud)