Condividi tramite


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, in mbstate_tgenere .

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)