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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
#1

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

27.06.2011, 14:55. Просмотров 4537. Ответов 5
Метки нет (Все метки)

В чём же разница? Вот допустим открыл я файл:

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++
C++ Разница между != и <=
C++ Разница между С и С++
C++ В чем разница между X x; и X x()?
C++ В чем разница между [] и * ?
C++ Разница между DEV и VS
Разница между if else и else if C++
C++ Различия в использовании seekg и seekp при работе с fstream

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1891 / 1423 / 104
Регистрация: 29.05.2011
Сообщений: 2,978
27.06.2011, 16:21     Разница между seekg() и seekp() #2
В стандарте я между ними разницы не заметил, кроме того, что они наследуются от разных классов.
Поведение у обеих одинаковое, обе вызывают rdbuf()->pubseekoff()
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
27.06.2011, 16:42     Разница между seekg() и seekp() #3
А ничего, что seekg() перемещает get pointer, а seekp() - put pointer ?
grizlik78
Эксперт С++
 Аватар для grizlik78
1891 / 1423 / 104
Регистрация: 29.05.2011
Сообщений: 2,978
27.06.2011, 17:01     Разница между seekg() и seekp() #4
Ничего. Как я уже сказал, обе они одинаково вызывают одну и туже функцию потокового буфера. А буфер один, и на запись, и на чтение. Да и эксперимент показывает, что обе функции двигают оба указателя одновременно.
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 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
1891 / 1423 / 104
Регистрация: 29.05.2011
Сообщений: 2,978
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()
Ответ Создать тему
Опции темы

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