Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2015, 17:45   #1
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию fstream | seekp влияет на read

Здравствуйте.

Если записать так:

Код:
    char arr[6];
    fstream f("file.txt", ios::binary | ios::in | ios::out);
    f.seekp(10);
    f.read(arr,5);
то считывание происходит с 11-го байта в файле.

Почему так происходит?

Заранее благодарен.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 19.08.2015, 17:49   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Дошли до работы с файлами в сях, а всё еще проблема в том, что первый байт - нулевой?
arr[5] - тоже как-бы не пятый элемент.
pu4koff вне форума Ответить с цитированием
Старый 19.08.2015, 17:55   #3
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
первый байт - нулевой?
Где?
Цитата:
Сообщение от pu4koff Посмотреть сообщение
arr[5] - тоже как-бы не пятый элемент.
Ничего не понял.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 19.08.2015, 18:55   #4
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
то считывание происходит с 11-го байта в файле.
Цитата:
Ничего не понял.
seekp(0) - первый байт
seekp(10) - 11-ый
Croessmah вне форума Ответить с цитированием
Старый 19.08.2015, 19:00   #5
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
seekp(0) - первый байт
seekp(10) - 11-ый
Это я в курсе, может неправильно написал вопрос.

Вопрос в том, почему seekp влияет на read?
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 19.08.2015, 19:12   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

read читает с позиции указателя и меняет её кстати после чтения, seekp эту позицию задает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.08.2015, 19:17   #7
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Вопрос в том, почему seekp влияет на read?
seekp будет вызывать pubseekpos или pubseekoff.
Те в свою очередь "выставят" позиции. Если для потока задан флаг ios_base :: in, то выставится позиция чтения, если задан ios_base :: out - позиция записи.
У Вас заданы оба флага. Подробности:
http://www.cplusplus.com/reference/o...ostream/seekp/
http://www.cplusplus.com/reference/s...uf/pubseekpos/
http://www.cplusplus.com/reference/s...uf/pubseekoff/
Croessmah вне форума Ответить с цитированием
Старый 19.08.2015, 19:19   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
почему seekp влияет на read?
А как ты думаешь, что seekp() делает? Для чего она?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.08.2015, 19:22   #9
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

seekp - установка позиции для записи, а seekg - вроде как для чтения, или я ошибаюсь?

И все же, почему seekp влияет на позицию при read?
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Stilet; 26.08.2015 в 19:11.
Krasiosoft вне форума Ответить с цитированием
Старый 26.08.2015, 19:00   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вроде в fstream seekg и seekp делают одно и тоже.
Скорее всего это работает для других типов стримов. А для файла иметь разные позиции для чтения и для записи без дополнительных переходов наверно ОС не позволяет, потому и не сделано так.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как влияет на ПО Embarcadero XE в фоне? Vanta11a C++ Builder 20 29.05.2013 14:17
Как влияет музыка на человека Ёжик в тумане Свободное общение 26 01.11.2012 15:03
выделение влияет на изменение? Ципихович Эндрю Microsoft Office Word 1 16.03.2012 12:07
Нажатие клавиш не влияет друг на друга misher Общие вопросы Delphi 8 17.03.2011 19:34
<!DOCTYPE влияет на код! wr_vu HTML и CSS 4 03.01.2011 02:48