Операции над файлом | получить и поставить указатель - PullRequest
4 голосов
/ 08 ноября 2011

У меня есть несколько вопросов по манипулированию файлом;

a.) Я немного растерялся из-за указателя get и put в c ++.Показываю ли я правильное положение указателя получения и установки указателя.

MyFile . seekg ( 0 , ios :: beg ) ;
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  
        __________________________________________________________________
       ^                                      ^               
       ^                                      ^                                  
       ^                                      ^
   get Pointer                               put pointer

Myfile . get ( character ) ;          
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  
        __________________________________________________________________
         ^                                             ^               
         ^                                             ^                         
         ^                                             ^
      get Pointer                                  put pointer

i.) Всегда ли Seekg и seekp гарантируют, что указатель получения всегда показывает правильное положение?
ii.) Если вы знаете большепо этой теме, можете ли вы показать / дать мне несколько баллов? Я должен быть осторожен при их использовании (если есть)

b.)

   FileIN . seekg ( 1, ifstream :: cur ) ;

равно

   FileIN . seekg ( 1, ios :: cur ) ; 

Платформа: linux Формат файла: двоичный

1 Ответ

4 голосов
/ 08 ноября 2011

а) Это неправильно.Файловые потоки поддерживают один указатель файла для ввода и вывода.И 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...