Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
#1

Криво читается бинарник - C++

08.10.2013, 16:34. Просмотров 210. Ответов 4
Метки нет (Все метки)

Здравия желаю!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <fstream>
using namespace std;
 
void main()
{
    char l=6,c=3,b;
    fstream a("LOL.txt",ios::out|ios::binary|ios::trunc);
    a.write(&l,sizeof(l));
    a.close();
 
    a.open("LOL.txt",ios::out|ios::binary|ios::ate);
    a.write(&c,sizeof(l));
    a.close();
 
    a.open("LOL.txt",ios::binary|ios::in);
    cout<<f.tellg()<<"   "<<a.rdbuf()->in_avail();
    a.read(&b,sizeof(l));
    a.close();
}
Собственно, не могу понять, почему при чтении в b записывается 3, а не 6.
seekg() говорит, что указатель на 0 элементе стоит.
Что еще не понятно: in_avail() также возвращает 0.
То есть и считать он не может ничего, а в b пишется последнее записанное.
Может я не правильно понял работу функций open/close...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2013, 16:34     Криво читается бинарник
Посмотрите здесь:

C++ Запись в бинарник и его чтение
Как это читается C++
C++ Не читается txt-файл
C++ Не правильно читается файл
Как компилировать программу C++ или код в бинарник (что бы запускался без участия ОС) C++
C++ Прочитать бинарник картинки через std::cin
C++ Не читается аргумент функции
C++ Где скачать бинарник haartraining для opencv
C++ GCC 4.7 компилируется, но не запускается бинарник
C++ Неправильно записывается бинарник
Не читается символ 'e' C++
C++ Как побайтно считать бинарник?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12507 / 7069 / 794
Регистрация: 27.09.2012
Сообщений: 17,454
Записей в блоге: 2
Завершенные тесты: 1
08.10.2013, 16:48     Криво читается бинарник #2
C++
1
a.open("LOL.txt",ios::out|ios::binary|ios::app);
а если второй раз открыть так?
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 16:50  [ТС]     Криво читается бинарник #3
Спасибо, это убрало ошибку с b.

Но in_avail() всё равно вернуло 0... Почему же? Оно же вроде кол-во байт оставшихся возвращает.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12507 / 7069 / 794
Регистрация: 27.09.2012
Сообщений: 17,454
Записей в блоге: 2
Завершенные тесты: 1
08.10.2013, 17:09     Криво читается бинарник #4
Попробуйте вызвать
C++
1
std::ios::sync_with_stdio(false);
в начале main
хотя...
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12507 / 7069 / 794
Регистрация: 27.09.2012
Сообщений: 17,454
Записей в блоге: 2
Завершенные тесты: 1
08.10.2013, 17:29     Криво читается бинарник #5
http://stackoverflow.com/questions/9...ome-set-eofbit
in_avail() returns the number of chars it can see in the internal buffer, if any. Otherwise it calls showmanyc() to try to detect if chars are known to be available elsewhere, so a buffer fill request is guaranteed to succeed.

In turn, showmanyc() will return the number of chars it knows about, if any, or -1 if it knows that a read will fail, or 0 if it doesn't have a clue.
Криво читается бинарник
Yandex
Объявления
08.10.2013, 17:29     Криво читается бинарник
Ответ Создать тему
Опции темы

Текущее время: 11:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru