Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

методы 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 в многострочном файле - C++
Добрый день! Не могу разобраться с мракобесием, которое начинает твориться с seekg и seekp, если в файле появляется переход на следующую...

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

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

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

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

5
grizlik78
Эксперт С++
1970 / 1463 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
27.06.2011, 16:21 #2
В стандарте я между ними разницы не заметил, кроме того, что они наследуются от разных классов.
Поведение у обеих одинаковое, обе вызывают rdbuf()->pubseekoff()
1
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,385
Записей в блоге: 2
Завершенные тесты: 1
27.06.2011, 16:42 #3
А ничего, что seekg() перемещает get pointer, а seekp() - put pointer ?
0
grizlik78
Эксперт С++
1970 / 1463 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
27.06.2011, 17:01 #4
Ничего. Как я уже сказал, обе они одинаково вызывают одну и туже функцию потокового буфера. А буфер один, и на запись, и на чтение. Да и эксперимент показывает, что обе функции двигают оба указателя одновременно.
1
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
27.06.2011, 18:15 #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;
}
1
grizlik78
Эксперт С++
1970 / 1463 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
27.06.2011, 18:45 #6
Да, и похоже это означает, что вызывается не просто rdbuf()->pubseekoff(off) или rdbuf()->pubseekoff(off, dir), а ещё и с указанием ios::in или ios::out, что в принципе, логично, но в стандарте почему-то опущено.
Ну а одинаковое поведение для файлов связано как-раз с файловым буфером, который, опять же по описанию в стандарте, использует для позиционирования fseek, не различающую позицию ввода и вывода.
Собственно я и сам хотел посоветовать не полагаться на одинаковость, а использовать ту или иную функцию в зависимости от желаемого действия. В конце концов это будет помогать и чтению тоже.
1
27.06.2011, 18:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2011, 18:45
Привет! Вот еще темы с ответами:

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

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

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

Разница между T **a и T *a[const_size] - C++
T c_a; // Здесь тип c_a это T(*) T **d_a = (T**) malloc(sizeof(T) * size); for (i = 0; i &lt; size; ++i) { d_a = (T*)...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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