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

Разница между seekg() и seekp() - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
27.06.2011, 14:55     Разница между seekg() и seekp() #1
В чём же разница? Вот допустим открыл я файл:

C++
1
fstream file("trans.dat",ios::out|ios::in|ios::binary);
Какая разница между file.seekg(0) и file.seekp(0) в этом случае?Да и есть ли она вообще? Ато я запутался, из прочитанного в книге я понял что разницы нет но в соседней теме мне намекают что есть, так есть или нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2011, 14:55     Разница между seekg() и seekp()
Посмотрите здесь:

Какие различия у функций seekg и seekp для работы с файлами? C++
Разница между i++ и ++i.Си C++
C++ Разница между 0 и 00 ?
методы seekg и seekp C++
C++ Разница между != и <=
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
27.06.2011, 16:21     Разница между seekg() и seekp() #2
В стандарте я между ними разницы не заметил, кроме того, что они наследуются от разных классов.
Поведение у обеих одинаковое, обе вызывают rdbuf()->pubseekoff()
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
27.06.2011, 16:42     Разница между seekg() и seekp() #3
А ничего, что seekg() перемещает get pointer, а seekp() - put pointer ?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
27.06.2011, 17:01     Разница между seekg() и seekp() #4
Ничего. Как я уже сказал, обе они одинаково вызывают одну и туже функцию потокового буфера. А буфер один, и на запись, и на чтение. Да и эксперимент показывает, что обе функции двигают оба указателя одновременно.
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
27.06.2011, 18:15     Разница между seekg() и seekp() #5
в случае строк разница есть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <sstream>
 
int main(){
    std::string s="abcd";
    std::stringstream ss(s);
    //ss.seekp(1);
    ss.put('e');
    std::cout<<static_cast<char>(ss.get())<<std::endl;
    std::cout<<static_cast<char>(ss.get())<<std::endl;
    return 0;
}
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
27.06.2011, 18:45     Разница между seekg() и seekp() #6
Да, и похоже это означает, что вызывается не просто rdbuf()->pubseekoff(off) или rdbuf()->pubseekoff(off, dir), а ещё и с указанием ios::in или ios::out, что в принципе, логично, но в стандарте почему-то опущено.
Ну а одинаковое поведение для файлов связано как-раз с файловым буфером, который, опять же по описанию в стандарте, использует для позиционирования fseek, не различающую позицию ввода и вывода.
Собственно я и сам хотел посоветовать не полагаться на одинаковость, а использовать ту или иную функцию в зависимости от желаемого действия. В конце концов это будет помогать и чтению тоже.
Yandex
Объявления
27.06.2011, 18:45     Разница между seekg() и seekp()
Ответ Создать тему
Опции темы

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