а) Это неправильно.Файловые потоки поддерживают один указатель файла для ввода и вывода.И seekg
, и seekp
делают одно и то же.Причина в том, что есть две разные функции, состоит в том, что интерфейс iostreams является универсальным, его можно использовать для устройств, которые имеют отдельные указатели put и get.*
В частности:
- если файл не открыт для чтения, входная последовательность не может быть прочитана.
- если файл не открыт для записи, выходная последовательность не может быть записана.
- Совместная позиция файла сохраняется как для входной, так и для выходной последовательности.
b) Да, они одинаковы.
РЕДАКТИРОВАТЬ:
index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer
MyFile . seekg ( 0 , ios :: beg ) ;
index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer
MyFile . seekp ( -10 , ios :: end ) ;
index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer
Myfile . get ( character ) ;
// you must sync/flush if your last operation was input and you switch to output,
// or your last operation was output and you switch to input.
MyFile . sync ( ) ;
index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer
MyFile . write ( SomeString, 4 ) ;
MyFile . flush ( ) ;
index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer