【问题标题】:How to output when reading a binary file?读取二进制文件时如何输出?
【发布时间】:2019-11-23 01:35:56
【问题描述】:

我已经创建了一个二进制文件,它是“index.dat”。它只包含一个整数列表。我想检查文件中存在的最后一个整数。为此,我将文件指针定位在最后一个整数并读取它。目前,我的文件包含 0 到 4 的整数,但输出始终为 6。

我该如何解决这个问题?

#include<iostream>
#include<fstream>
using namespace std;
int main()
{   int i;
    ifstream infile;
    infile.open("index.dat",ios::binary|ios::in);
    if(infile.is_open())
    {   infile.seekg(sizeof(i),ios::end);
        infile.read(reinterpret_cast<char*>(&i),sizeof(i));
        cout<<i;
    }
    infile.close();
}

【问题讨论】:

  • 您能提供一个示例输入文件吗?
  • 您正试图寻找sizeof(i)字节过去文件的结尾。这当然失败了。随后的read 也失败了,然后您打印未初始化的变量。从末端搜索时,您需要一个负偏移量。

标签: c++ fstream iostream


【解决方案1】:

Igor Tandetnik 在comment 中明确表示:

您正试图寻找sizeof(i)字节过去文件的结尾。这 当然失败了。随后的read 也失败了,然后你打印 未初始化的变量。当从头寻找时,你需要一个否定的 抵消。 — Igor Tandetnik 18 小时前

所以不是

infile.seekg(sizeof(i),ios::end);

你需要做类似的事情

infile.seekg(-static_cast<streamoff>(sizeof(i)), ios_base::end);

(转换为streamoff是为了确保我们不会将-应用于无符号值,从而导致非常大的正值。streamoff是有符号的,ifstream::off_type保证是@ 987654330@.)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多