C ++: на самом деле не читает из двоичного файла - PullRequest
0 голосов
/ 04 февраля 2020

Я знаю, что такого рода вопросы часто задавались, но независимо от того, какой пример я следую, я не могу получить ожидаемые результаты. Я хочу прочитать целые числа из двоичного файла и сохранить их в векторе. У меня есть код ниже.

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();

Я пробовал оба варианта при чтении, но когда я печатаю содержимое вектора, все элементы равны нулю.

1 Ответ

0 голосов
/ 04 февраля 2020
// Option 1
infile.read(reinterpret_cast<char*>(&input[0]), sizeof(int);

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

Вам необходимо передать размер фрагмента данных, который вы хотите прочитать, а не размер всего файла. Как уже упоминалось в комментариях, вам также необходимо сбросить указатель на начало файла после определения размера.

Если вы используете более новый C ++ (C ++ 11), преобразование имя файла для C -строки не обязательно. Если у вас есть C ++ 17, возможно, стоит изучить библиотеку <filesystem>.

Если вы хотите прочитать много целых чисел, поместите чтение в al oop.

...