gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:25 24 4
gpt4 key购买 nike

我已经创建了一个二进制文件,它是“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 在 comment 中明确说明了这一点:

You are trying to seek to sizeof(i) bytes past end of file. This of course fails. The subsequent read also fails, and then you print uninitialized variable. When seeking from end, you need a negative offset. — Igor Tandetnik 18 hours ago

所以代替

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

你需要做类似的事情

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

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

关于c++ - 读取二进制文件时如何输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com