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

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

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

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

27.06.2011, 14:55. Просмотров 4870. Ответов 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++
void my_work(const char *str, double KV) throw (myError) { fstream File(str, ios::in | ios::out | ios::binary); if(File.is_open()) ...

Различия в использовании seekg и seekp при работе с fstream - C++
Если я использую класс fstream, тогда для перемещения внутри файла без разницы какую функцию использовать (seekg() и seekp())??? ...

Какие различия у функций seekg и seekp для работы с файлами? - C++
Есть такая формулировка: seekg случайный доступ к потоку ввода seekp случайный доступ к потоку вывода Отсюда...

Разница между if else и else if - C++
Привет, у меня возник "нубский" вопрос. Этот код, это же соркащенная версия нижнего? int i = 3; if (i == 1) ...

Разница между != и <= - C++
Здравствуйте! Писал программу с использованием QuickSort и заинтересовала такая вещь: void quickSort(int arr, int left, int right) { ...

Разница между 0 и 00 ? - C++
Как заставить программу различать 0 и 00 (ноль и два ноля, как в рулетке)? Вариант с заменой 00 на какое-то число не подходит, так как...

Разница между С и С++ - C++
Если не брать во внимание объекты и классы, то разница состоит только лишь в cin, cout и директивах?

Разница между программами - C++
Какая между этими программами разница? Почему они другие результаты выводят? #include &lt;iostream.h&gt; int main() { int i=5; ...

В чем разница между С и С++ - C++
Возник вопрос в чем жи разница между С и С++ кроме того, что в С++ есть классы а в С их нету ?

вчем разница между с++ и ++с - C++
Не как него могу понять в чем разница между с++ и ++с ? с - счетчик. просто пример: int main() { int c = 0; // счетчик int k; ...

В чем разница между X x; и X x()? - C++
Корректный ли этот ответ?

Разница между DEV и VS - C++
Подскажите пожалуйста в чем проблема, писал задания на DEV C++, теперь начал работать на VS, но они не работают там.


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.06.2011, 16:21     Разница между seekg() и seekp() #2
В стандарте я между ними разницы не заметил, кроме того, что они наследуются от разных классов.
Поведение у обеих одинаковое, обе вызывают rdbuf()->pubseekoff()
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
27.06.2011, 16:42     Разница между seekg() и seekp() #3
А ничего, что seekg() перемещает get pointer, а seekp() - put pointer ?
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.06.2011, 17:01     Разница между seekg() и seekp() #4
Ничего. Как я уже сказал, обе они одинаково вызывают одну и туже функцию потокового буфера. А буфер один, и на запись, и на чтение. Да и эксперимент показывает, что обе функции двигают оба указателя одновременно.
igorrr37
1641 / 1269 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
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()
Ответ Создать тему
Опции темы

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