std::fstream fin("emptyFile", std::fstream::in);
std::cout << fin.eof() << std::endl;
这打印0
。所以使用eof
函数我无法检查文件是否为空。或者在读取一些数据后,我需要检查其中是否没有更多数据。
有两种方法可以检查您是否“可以从文件中读取某些内容”:
fin >> var;
)fin.seekg(0, ios_base::end);
后跟size_t len = fin.tellg();
(然后回到开头fin.seekg(0, ios_base::beg);
)但是,如果您尝试从文本文件中读取整数,则第二种方法可能不起作用 - 文件可能有 2MB 长,并且仍然不包含单个整数值,因为它全是空格和换行符等。
请注意,它会fin.eof()
告诉您是否尝试读取文件末尾之外的内容。
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