读取二进制文件时如何输出?

How to output when reading a binary file?

本文关键字:输出 何输出 二进制文件 读取      更新时间:2023-10-16

我已经创建了一个二进制文件,它是"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();
}

Igor Tandetnik在评论中明确表示:

您正在尝试sizeof(i)超过文件末尾字节。这 当然失败了。后续read也失败,然后您打印 未初始化的变量。当从末端寻求时,你需要一个否定 抵消。— 伊戈尔·坦德特尼克 18 小时前

所以而不是

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

你需要做类似的事情

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

(streamoff的强制转换是为了确保我们不会对无符号值应用-,从而产生非常大的正值。streamoff已签名,ifstream::off_type保证streamoff