std::fstream fin("emptyFile", std::fstream::in);
std::cout << fin.eof() << std::endl;
这会打印0
。所以使用eof
函数我无法检查文件是否为空。或者在读完一些数据后,我需要检查其中是否没有更多数据。
答案 0 :(得分:3)
有两种方法可以检查文件中是否“可以读取内容”:
fin >> var;
)fin.seekg(0, ios_base::end);
后跟size_t len = fin.tellg();
检查文件大小(然后使用fin.seekg(0, ios_base::beg);
返回到开头)但是,如果您尝试从文本文件中读取整数,则第二种方法可能无效 - 文件长度可能为2MB,并且仍然不包含单个整数值,因为它是所有空格和换行符等
请注意,fin.eof()
会告诉您是否尝试读取BEYOND文件的末尾。
答案 1 :(得分:1)
eof()
会给您错误的结果,因为eofbit
尚未设置。如果您阅读了某些内容,则会传递文件末尾并设置eofbit
。
避免eof()
并使用以下内容:
std::streampos current = fin.tellg();
fin.seekg (0, fin.end);
bool empty = !fin.tellg(); // true if empty file
fin.seekg (current, fin.beg); //restore stream position