我已经创建了一个二进制文件“ 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();
}
答案 0 :(得分:0)
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
已签名,{{ 1}}保证为ifstream::off_type
。)