C++:实际上不是从二进制文件中读取

C++: Not actually reading from binary file

本文关键字:二进制文件 读取 实际上 C++      更新时间:2023-10-16

我知道这种问题经常被问到,但无论我遵循什么例子,我似乎都无法得到预期的结果。我想从二进制文件中读取整数并将它们存储在向量中。我有下面的代码。

std::ifstream infile;
infile.open(fileName.c_str(), std::ios_base::binary | std::ios_base::in);
infile.seekg(0, infile.end);
long size = infile.tellg();
std::vector<int> input(size/sizeof(int), 0);
// Option 1
infile.read(reinterpret_cast<char*>(&input[0]), size);
// Option 2
infile.read((char*)&input[0], size);
infile.close();

我在阅读时尝试了这两个选项,但是当我打印矢量的内容时,所有元素都是零。

// Option 1
infile.read(reinterpret_cast<char*>(&input[0]), sizeof(int);

std::istream::read((std::istream::tellg((

您需要传递要读取的数据段的大小,而不是整个文件的大小。如注释中所述,在确定大小后,您还需要重置指向文件开头的指针。

如果您使用的是较新的C++ (C++11(,则不需要将文件名转换为 C 字符串。如果您有 C++17,可能值得学习<filesystem>库。

如果您想读取许多整数,请将读取放在循环中。