fpos 類別
類別範本描述物件,該物件可以儲存還原任何數據流中任意檔案位置指標所需的所有資訊。 fpos<St> 類別的對象實際上會儲存至少兩個成員物件:
位元組位移,屬於 streamoff 類型。
轉換狀態,用於類別basic_filebuf 類型的 物件,
St
通常是mbstate_t
。
它也可以儲存 fpos_t
類型的任意檔案位置,以供 basic_filebuf 類別的物件使用。 但在大小受限的環境中,streamoff
與 fpos_t
有時候可以互換使用。 若環境中沒有任何資料流有依存於狀態的編碼,實際上可能不會用到 mbstate_t
。 因此,儲存的成員物件數目可能會不同。
語法
template <class Statetype>
class fpos
參數
Statetype
狀態資訊。
建構函式
建構函式 | 描述 |
---|---|
fpos | 建立一個物件,其中包含與資料流中的位置 (位移) 有關的資訊。 |
成員函式
成員函數 | 描述 |
---|---|
seekpos | 僅限 C++ 標準程式庫內部使用。 請勿從您的程式代碼呼叫此方法。 |
state | 設定或傳回轉換狀態。 |
操作員
運算子 | 描述 |
---|---|
operator!= | 測試檔案位置指標是否不相等。 |
operator+ | 遞增檔案位置指標 |
operator+= | 遞增檔案位置指標 |
operator- | 減少檔案位置指標。 |
operator-= | 減少檔案位置指標。 |
operator== | 測試檔案位置指標是否相等。 |
operator streamoff | 將類型 fpos 的物件轉換成類型 streamoff 的物件。 |
需求
標頭:<ios>
命名空間:std
fpos::fpos
建立一個物件,其中包含與資料流中的位置 (位移) 有關的資訊。
fpos(streamoff _Off = 0);
fpos(Statetype _State, fpos_t _Filepos);
參數
_Off
資料流中的位移。
_州
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;
參數
_Off
遞增檔案位置指標時所要依據的位移。
傳回值
檔案中的位置。
備註
此成員函式會傳回 fpos(*this) +=_Off
。
範例
如需 operator+
的使用方式範例,請參閱 operator!=。
fpos::operator+=
遞增檔案位置指標
fpos<Statetype>& operator+=(streamoff _Off);
參數
_Off
遞增檔案位置指標時所要依據的位移。
傳回值
檔案中的位置。
備註
成員函式會將_Off新增至儲存的位移成員物件,然後傳*this
回 。 使用檔案時,結果只適用於沒有狀態相依編碼的二進位數據流。
範例
如需 operator+=
的使用方式範例,請參閱 operator!=。
fpos::operator-
減少檔案位置指標。
streamoff operator-(const fpos<Statetype>& right) const;
fpos<Statetype> operator-(streamoff _Off) const;
參數
right
檔案位置。
_Off
資料流位移。
傳回值
第一個成員函式會傳回 (streamoff)*this - (streamoff) right
。 第二個成員函式會傳回 fpos(*this) -= _Off
。
範例
如需 operator-
的使用方式範例,請參閱 operator!=。
fpos::operator-=
減少檔案位置指標。
fpos<Statetype>& operator-=(streamoff _Off);
參數
_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;
}