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

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

Восстановить пароль Регистрация
 
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 16:34     Криво читается бинарник #1
Здравия желаю!
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...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
08.10.2013, 17:09     Криво читается бинарник #4
Попробуйте вызвать
C++
1
std::ios::sync_with_stdio(false);
в начале main
хотя...
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 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     Криво читается бинарник
Ответ Создать тему
Опции темы

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