Почему эта программа неправильно читает (или записывает?) файл .bin?(С++)
-
05-09-2019 - |
Вопрос
Я создал эту программу:
#include <iostream>
#include <fstream>
using namespace std;
int main () {
fstream file;
file.open("test.bin", ios::in | ios::out | ios::binary);
if(!file.is_open())
{
return -1;
}
int n = 5;
int x;
file.write(reinterpret_cast<char*>(&n), sizeof(n));
file.read(reinterpret_cast<char*>(&x), sizeof(x));
std::cout<<x;
file.close();
std::cin.ignore();
return 0;
}
он должен записать целое число «n» в файл .bin «test.bin», затем прочитать данные из «test.bin» в целое число «x», а затем вывести «x» на экран.
Когда запускаю программу, она показывает не 5, а -842150451.Почему это происходит и как это исправить?
Решение
Разве file.write() не перемещает указатель текущего файла при его записи, заставляя вас читать данные из первого места ПОСЛЕ записанных данных?
Другие советы
Вставлять file.seekg(0);
между командами чтения и записи.
Вам необходимо переместить файловый поток в начало файла после выполнения записи, чтобы прочитать только что записанные данные.
Вы также должны проверить, что запись написала все, что вы ожидали, и действительно ли чтение вообще что-нибудь прочитало.Полуслучайное число связано с ошибкой чтения.
Я согласен с Джерико.Тебе необходимо:
file.seekg (0, ios::beg);