@komnotmr
студент

C++ fstream. Не работает чтение из бинарного файла, почему?

int i = 7;
			fstream ofs;
			ofs.open("./default.bin", ios::binary | ios::in | ios::out | ios::trunc);

			if (!ofs.is_open())
			{
					cout << "Не удалось открыть файл ERROR" << endl;
					break;
			}
			ofs.seekp(0);
			ofs.seekg(0);
			ofs.read((char*)&i, sizeof(int));

			cout << ofs.tellg() << endl;
			cout << ofs.tellp() << endl;

В результате i так и остаётся равным 7, а в консоль выводятся:
-1
-1
В бинарном файле записано:
03 00 00 00
Т.е по сути моя i должна быть равна 3, но почему то программа не работает. В чём может быть проблема ?
  • Вопрос задан
  • 1060 просмотров
Решения вопроса 1
TrueBers
@TrueBers
Гуглю за еду
Т.е по сути моя i должна быть равна 3
Не должна она вам ничего, пока документацию не прочитаете.

Зачем вы добавили ios::trunc при открытии файла?
trunc от слова truncate, переводится как: обрезать, усекать, урезать, сокращать.

В документации ясно написано же: trunc discard the contents of the stream when opening. Что переводится как, отбрасывает содержимое потока при открытии.
Он же вам его очищает и открывает новый пустой файл, вы его читаете, а там нечего читать. Вот и результат.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы