Classe fpos
Il modello di classe descrive un oggetto in grado di archiviare tutte le informazioni necessarie per ripristinare un indicatore di posizione di file arbitrario all'interno di qualsiasi flusso. Un oggetto di classe fpos<St> archivia in modo efficace almeno due oggetti membro:
Un offset di byte, di tipo streamoff.
Stato di conversione, per l'uso da parte di un oggetto della classe basic_filebuf, di tipo
St
, inmbstate_t
genere .
Può anche archiviare una posizione di file arbitraria per l'uso da parte di un oggetto della classe basic_filebuf, di tipo fpos_t
. Per un ambiente con dimensioni del file limitate, tuttavia, a volte è possibile usare indifferentemente streamoff
e fpos_t
. Per un ambiente senza flussi con codifica dipendente dallo stato, è effettivamente possibile che mbstate_t
non sia usato. Di conseguenza, il numero di oggetti membro archiviati può variare.
Sintassi
template <class Statetype>
class fpos
Parametri
Statetype
Informazioni di stato.
Costruttori
Costruttore | Descrizione |
---|---|
fpos | Creare un oggetto che contiene informazioni su una posizione (offset) in un flusso. |
Funzioni membro
Funzione membro | Descrizione |
---|---|
seekpos | Usata internamente solo dalla libreria standard C++. Non chiamare questo metodo dal codice. |
state | Imposta o restituisce lo stato della conversione. |
Operatori
Operatore | Descrizione |
---|---|
operator!= | Testa gli indicatori di posizione del file per rilevare la disuguaglianza. |
operator+ | Incrementa un indicatore di posizione del file. |
operator+= | Incrementa un indicatore di posizione del file. |
operator- | Decrementa un indicatore di posizione del file. |
operator-= | Decrementa un indicatore di posizione del file. |
operator== | Testa gli indicatori di posizione del file per rilevare l'uguaglianza. |
operator streamoff | Esegue il cast del tipo fpos in oggetto di tipo streamoff . |
Requisiti
Intestazione:<ios>
Spazio dei nomi: std
fpos::fpos
Creare un oggetto che contiene informazioni su una posizione (offset) in un flusso.
fpos(streamoff _Off = 0);
fpos(Statetype _State, fpos_t _Filepos);
Parametri
_Spento
Offset nel flusso.
_Stato
Stato iniziale dell'oggetto fpos
.
_Filepos
Offset nel flusso.
Osservazioni:
Il primo costruttore archivia l'offset _Off, rispetto all'inizio del file e nello stato di conversione iniziale. Se _Off è -1, l'oggetto risultante rappresenta una posizione del flusso non valida.
Il secondo costruttore archivia un offset zero e l'oggetto _State.
fpos::operator!=
Testa gli indicatori di posizione del file per rilevare la disuguaglianza.
bool operator!=(const fpos<Statetype>& right) const;
Parametri
right
Indicatore di posizione del file rispetto al quale eseguire il confronto.
Valore restituito
true
se gli indicatori di posizione del file non sono uguali, in caso contrario false
.
Osservazioni:
La funzione membro restituisce!(*this == right)
.
Esempio
// 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+
Incrementa un indicatore di posizione del file.
fpos<Statetype> operator+(streamoff _Off) const;
Parametri
_Spento
Offset in base al quale si vuole incrementare l'indicatore di posizione del file.
Valore restituito
Posizione nel file.
Osservazioni:
La funzione membro restituiscefpos(*this) +=_Off
.
Esempio
Per un esempio di come usare operator+
, vedere operator!=.
fpos::operator+=
Incrementa un indicatore di posizione del file.
fpos<Statetype>& operator+=(streamoff _Off);
Parametri
_Spento
Offset in base al quale si vuole incrementare l'indicatore di posizione del file.
Valore restituito
Posizione nel file.
Osservazioni:
La funzione membro aggiunge _Off all'oggetto membro offset archiviato e quindi restituisce *this
. Quando si lavora con i file, il risultato è valido solo per i flussi binari che non dispongono di una codifica dipendente dallo stato.
Esempio
Per un esempio di come usare operator+=
, vedere operator!=.
fpos::operator-
Decrementa un indicatore di posizione del file.
streamoff operator-(const fpos<Statetype>& right) const;
fpos<Statetype> operator-(streamoff _Off) const;
Parametri
right
Posizione del file.
_Spento
Offset nel flusso.
Valore restituito
La prima funzione membro restituisce (streamoff)*this - (streamoff) right
. La seconda funzione membro restituisce fpos(*this) -= _Off
.
Esempio
Per un esempio di come usare operator-
, vedere operator!=.
fpos::operator-=
Decrementa un indicatore di posizione del file.
fpos<Statetype>& operator-=(streamoff _Off);
Parametri
_Spento
Offset nel flusso.
Valore restituito
La funzione membro restituiscefpos(*this) -= _Off
.
Osservazioni:
Quando si lavora con i file, il risultato è valido solo per i flussi binari che non dispongono di una codifica dipendente dallo stato.
Esempio
Per un esempio di come usare operator-=
, vedere operator!=.
fpos::operator==
Testa gli indicatori di posizione del file per rilevare l'uguaglianza.
bool operator==(const fpos<Statetype>& right) const;
Parametri
right
Indicatore di posizione del file rispetto al quale eseguire il confronto.
Valore restituito
true
se gli indicatori di posizione del file sono uguali; in caso contrario false
, .
Osservazioni:
La funzione membro restituisce(streamoff)*this == (streamoff)right
.
Esempio
Per un esempio di come usare operator+=
, vedere operator!=.
fpos::operator streamoff
Esegue il cast dell'oggetto di tipo fpos
in oggetto di tipo streamoff
.
operator streamoff() const;
Osservazioni:
La funzione membro restituisce l'oggetto membro offset archiviato e l'eventuale offset aggiuntivo archiviato come parte dell'oggetto membro fpos_t
.
Esempio
// 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
Questo metodo viene usato internamente solo dalla libreria standard C++. Non chiamare questo metodo dal codice.
fpos_t seekpos() const;
fpos::state
Imposta o restituisce lo stato della conversione.
Statetype state() const;
void state(Statetype _State);
Parametri
_Stato
Nuovo stato di conversione.
Valore restituito
Stato di conversione.
Osservazioni:
La prima funzione membro restituisce il valore archiviato nell'oggetto St
membro. La seconda funzione membro archivia _State nell'oggetto St
membro.
Esempio
// 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;
}
Vedi anche
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Programmazione iostream
iostreams Conventions (Convenzioni di iostream)