Поделиться через


Класс fpos

Шаблон класса описывает объект, который может хранить все сведения, необходимые для восстановления произвольного индикатора положения файла в любом потоке. Объект класса fpos<St> эффективно сохраняет по крайней мере два объекта-члена:

  • Смещение в байтах типа streamoff.

  • Состояние преобразования, используемое объектом класса basic_filebuf типа St, обычно mbstate_t.

Также можно хранить произвольное положение в файле для использования объектом класса basic_filebuf типа fpos_t. В среде с ограниченным размером файлов streamoff и fpos_t могут быть взаимозаменяемыми. В среде без потоков с кодированием, зависящим от состояния, mbstate_t может фактически не использоваться. Таким образом, число хранимых объектов-членов может различаться.

Синтаксис

template <class Statetype>
class fpos

Параметры

Statetype
Сведения о состоянии.

Конструкторы

Конструктор Description
fpos Создает объект, содержащий сведения о положении (смещении) в потоке.

Функции элементов

Функция-член Description
seekpos Используется только внутренними механизмами стандартной библиотеки C++. Не вызывайте этот метод из кода.
state Задает или возвращает состояние преобразования.

Операторы

Operator Description
оператор!= Проверяет индикаторы положений в файлах на неравенство.
operator+ Увеличивает значение положения в файле.
оператор+= Увеличивает значение положения в файле.
operator- Уменьшает значение положения в файле.
operator-= Уменьшает значение положения в файле.
operator== Проверяет индикаторы положений в файлах на равенство.
operator streamoff Приводит объект типа fpos к объекту типа streamoff.

Требования

Заголовок:<ios>

Пространство имен: std

fpos::fpos

Создает объект, содержащий сведения о положении (смещении) в потоке.

fpos(streamoff _Off = 0);

fpos(Statetype _State, fpos_t _Filepos);

Параметры

_От
Смещение в поток.

_Государство
Начальное состояние объекта fpos.

_Filepos
Смещение в поток.

Замечания

Первый конструктор сохраняет смещение _Off относительно начала файла и в исходном состоянии преобразования. Если _Off равно -1, результирующий объект представляет недопустимое положение потока.

Второй конструктор сохраняет нулевое смещение и объект _State.

fpos::operator!=

Проверяет индикаторы положений в файлах на неравенство.

bool operator!=(const fpos<Statetype>& right) const;

Параметры

right
Индикатор положения в файле, с которым нужно выполнять сравнение.

Возвращаемое значение

true Значение , если индикаторы положения файла не равны, в противном случае false.

Замечания

Функция-член возвращает значение !(*this == right).

Пример

// fpos_op_neq.cpp
// compile with: /EHsc
#include <fstream>
#include <iostream>

int main( )
{
   using namespace std;

   fpos<int> pos1, pos2;
   ifstream file;
   char c;

   // Compare two fpos object
   if ( pos1 != pos2 )
      cout << "File position pos1 and pos2 are not equal" << endl;
   else
      cout << "File position pos1 and pos2 are equal" << endl;

   file.open( "fpos_op_neq.txt" );
   file.seekg( 0 );   // Goes to a zero-based position in the file
   pos1 = file.tellg( );
   file.get( c);
   cout << c << endl;

   // Increment pos1
   pos1 += 1;
   file.get( c );
   cout << c << endl;

   pos1 = file.tellg( ) - fpos<int>( 2);
   file.seekg( pos1 );
   file.get( c );
   cout << c << endl;

   // Increment pos1
   pos1 = pos1 + fpos<int>( 1 );
   file.get(c);
   cout << c << endl;

   pos1 -= fpos<int>( 2 );
   file.seekg( pos1 );
   file.get( c );
   cout << c << endl;

   file.close( );
}

fpos::operator+

Увеличивает значение положения в файле.

fpos<Statetype> operator+(streamoff _Off) const;

Параметры

_От
Смещение, на которое нужно увеличить индикатор положения в файле.

Возвращаемое значение

Позиция в файле.

Замечания

Функция-член возвращает значение fpos(*this) +=_Off.

Пример

См. в operator!= пример применения operator+.

fpos::operator+=

Увеличивает значение положения в файле.

fpos<Statetype>& operator+=(streamoff _Off);

Параметры

_От
Смещение, на которое нужно увеличить индикатор положения в файле.

Возвращаемое значение

Позиция в файле.

Замечания

Функция-член добавляет _Off в объект элемента смещения, а затем возвращается *this. При работе с файлами результат действителен только для двоичных потоков, которые не имеют кодировки, зависящей от состояния.

Пример

См. в operator!= пример применения operator+=.

fpos::operator-

Уменьшает значение положения в файле.

streamoff operator-(const fpos<Statetype>& right) const;

fpos<Statetype> operator-(streamoff _Off) const;

Параметры

right
Положение в файле.

_От
Смещение потока.

Возвращаемое значение

Первая функция-член возвращает значение (streamoff)*this - (streamoff) right. Вторая функция-член возвращает значение fpos(*this) -= _Off.

Пример

См. в operator!= пример применения operator-.

fpos::operator-=

Уменьшает значение положения в файле.

fpos<Statetype>& operator-=(streamoff _Off);

Параметры

_От
Смещение потока.

Возвращаемое значение

Функция-член возвращает значение fpos(*this) -= _Off.

Замечания

При работе с файлами результат действителен только для двоичных потоков, которые не имеют кодировки, зависящей от состояния.

Пример

См. в operator!= пример применения operator-=.

fpos::operator==

Проверяет индикаторы положений в файлах на равенство.

bool operator==(const fpos<Statetype>& right) const;

Параметры

right
Индикатор положения в файле, с которым нужно выполнять сравнение.

Возвращаемое значение

true Значение false.

Замечания

Функция-член возвращает значение (streamoff)*this == (streamoff)right.

Пример

См. в operator!= пример применения operator+=.

fpos::operator streamoff

Приводит объект типа fpos к объекту типа streamoff.

operator streamoff() const;

Замечания

Функция-член возвращает хранимый объект-член смещения и любое дополнительное смещение, хранимое как часть объекта-члена fpos_t.

Пример

// fpos_op_streampos.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   streamoff s;
   ofstream file( "rdbuf.txt");

   fpos<mbstate_t> f = file.tellp( );
   // Is equivalent to ..
   // streampos f = file.tellp( );
   s = f;
   cout << s << endl;
}
0

fpos::seekpos

Этот метод используется только внутренними механизмами стандартной библиотеки C++. Не вызывайте этот метод из кода.

fpos_t seekpos() const;

fpos::state

Задает или возвращает состояние преобразования.

Statetype state() const;

void state(Statetype _State);

Параметры

_Государство
Новое состояние преобразования.

Возвращаемое значение

Состояние преобразования.

Замечания

Первая функция-член возвращает значение, хранящееся в объекте-члене St . Вторая функция-член хранит _State в объекте-члене St .

Пример

// fpos_state.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <fstream>

int main() {
   using namespace std;
   streamoff s;
   ifstream file( "fpos_state.txt" );

   fpos<mbstate_t> f = file.tellg( );
   char ch;
   while ( !file.eof( ) )
      file.get( ch );
   s = f;
   cout << f.state( ) << endl;
   f.state( 9 );
   cout << f.state( ) << endl;
}

См. также

Потокобезопасность в стандартной библиотеке C++
Программирование iostream
Соглашения iostreams