【问题标题】:How to check if there isn't data in file to read如何检查文件中是否没有要读取的数据
【发布时间】:2013-07-25 17:46:46
【问题描述】:
 std::fstream fin("emptyFile", std::fstream::in);
 std::cout << fin.eof() << std::endl;

这会打印出0。所以使用eof 函数我无法检查文件是否为空。或者在读取一些数据后,我需要检查其中是否没有更多数据。

【问题讨论】:

    标签: c++ file file-io io eof


    【解决方案1】:

    有两种方法可以检查您是否“可以从文件中读取内容”:

    1. 尝试读取它,如果读取失败,则说明不正常……(例如fin &gt;&gt; var;
    2. 检查文件的大小,使用fin.seekg(0, ios_base::end);,后跟size_t len = fin.tellg();(然后使用fin.seekg(0, ios_base::beg);回到开头)

    但是,如果您尝试从文本文件中读取整数,则第二种方法可能不起作用 - 文件可能有 2MB 长,并且仍然不包含单个整数值,因为它都是空格和换行符等.

    请注意,fin.eof() 会告诉您是否有人尝试在文件末尾之外读取。

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        相关资源
        最近更新 更多