Funciones miembro del flujo de entrada
Las funciones miembro del flujo de entrada se utilizan para la entrada del disco.La inclusión de las funciones miembro:
La función open para los flujos de entrada
La función get
La función de getline
La función read
Las funciones de seekg y de tellg
La función close para los flujos de entrada
La función open para los flujos de entrada
Si utiliza una secuencia de archivo de entrada (ifstream), debe asociar esa secuencia con un archivo de disco específico.Puede hacerlo en el constructor, o puede utilizar la función de abierto .En cualquier caso, los argumentos son iguales.
Especifica normalmente un indicador de ios_base:: openmode al abrir el archivo asociado a un flujo de entrada (el modo predeterminado es IOS:: en).Para obtener una lista de los indicadores de open_mode , vea La función open.Los marcadores se pueden combinar con el bit a bit OR ( | ) operador.
Para leer un archivo, utilice primero la función miembro de error para determinar si existe:
istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...
La función get
La función sin formato del miembro de obtenga funciona como el operador de >> con dos excepciones.Primero, la función de obtenga incluye caracteres de espacio en blanco, mientras que el extractor excluye el espacio en blanco cuando se establece la marca de skipws (valor predeterminado).En segundo lugar, la función de obtenga es menos probable que una secuencia de salida atada (cout, por ejemplo) que se vaciará.
Una variación de la función de obtenga especifica una dirección del búfer y el número máximo de caracteres para leer.Esto es útil para limitar el número de caracteres enviados a una variable concreta, como en este ejemplo se muestra:
// ioo_get_function.cpp
// compile with: /EHsc
// Type up to 24 characters and a terminating character.
// Any remaining characters can be extracted later.
#include <iostream>
using namespace std;
int main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << line << endl;
}
Entrada
1234
Resultados del ejemplo
1234
La función de getline
La función miembro de getline es similar a la función de obtenga .Ambas funciones permiten un tercer argumento que especifica el carácter de terminación de la entrada.el valor predeterminado es el carácter de nueva línea.Ambas funciones reserva un carácter a carácter de terminación requerido.Sin embargo, obtenga permite el carácter de terminación de la secuencia y getline quita el carácter de terminación.
El ejemplo siguiente especifica un carácter de terminación para el flujo de entrada:
// getline_func.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char line[100];
cout << " Type a line terminated by 't'" << endl;
cin.getline( line, 100, 't' );
cout << line;
}
Entrada
test
La función read
La función miembro de lectura lee bytes de un archivo a un área de memoria concreta.El argumento length determina el número de bytes leídos.Si no incluye este argumento, la lectura se detiene cuando el final del archivo físico se alcanza o, en el caso de un archivo en modo de texto, cuando se lee un carácter incrustado de EOF .
Este ejemplo lee un registro binario del archivo de nóminas en una estructura:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
struct
{
double salary;
char name[23];
} employee;
ifstream is( "payroll" );
if( is ) { // ios::operator void*()
is.read( (char *) &employee, sizeof( employee ) );
cout << employee.name << ' ' << employee.salary << endl;
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
El programa se supone que los registros de datos están con formato exactamente como se especifica en la estructura sin finalizar los caracteres de retorno de carro y avance de línea.
Las funciones de seekg y de tellg
Secuencias de archivo de entrada conservan un puntero interno a la posición en el archivo donde leer los datos después.Establece este puntero a la función de seekg , como se muestra aquí:
#include <iostream>
#include <fstream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
tfile.seekg( 8 ); // Seek 8 bytes in (past salary)
while ( tfile.good() ) { // EOF or failure stops the reading
tfile.get( ch );
if( !ch ) break; // quit on null
cout << ch;
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
Para utilizar seekg para implementar registro-orientó los sistemas de administración de datos, multiplica el tamaño del registro de longitud fija por el número de registro para obtener la posición de bytes en relación con el fin del archivo, y después utiliza el objeto de obtenga para leer el registro.
La función miembro de tellg devuelve el archivo actual colocar para leer.Este valor es de streamposescrito, typedef definido en <iostream> .El ejemplo siguiente se lee un archivo y muestra los mensajes que muestran las posiciones de espacios.
#include <fstream>
#include <iostream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
while ( tfile.good( ) ) {
streampos here = tfile.tellg();
tfile.get( ch );
if ( ch == ' ' )
cout << "\nPosition " << here << " is a space";
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
La función close para los flujos de entrada
La función miembro de cierre cierra el archivo de disco asociado a un archivo de entrada transmitir y libera el identificador de archivo del sistema operativo.ifstream destructor cierra el archivo automáticamente, pero puede utilizar la función de cierre si necesita abrir otro archivo para el mismo objeto de secuencia.