Класс 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