C ++ ifstream para leer archivos

C ++ ifstream para leer archivos
IfStream representa la transmisión de archivo de entrada. "Entrada" se refiere a los caracteres de un archivo que ingresa al programa en ejecución. También está el término C ++, OfStream, que representa la transmisión de archivo de salida. Sin embargo, este artículo se centra en Ifstream. Ifstream es una clase C ++, para manejar la secuencia de bytes en la computadora, que es de un archivo en el disco, y ingresa al programa en ejecución. Ifstream está en la biblioteca (encabezado), fstream, que debe incluirse en el programa del código fuente.

Un programa C ++ para usar la clase ifstream debe comenzar de la siguiente manera:

#incluir
#incluir
usando el espacio de nombres STD;

La primera línea incluye el encabezado que tiene la definición de la clase ifstream. La segunda línea incluye el encabezado iOSTream que tiene el objeto Cout para imprimir la salida al terminal (consola). La tercera línea es una declaración, y no una directiva. El espacio de nombres estándar es cualquier nombre seguido de "STD :;".

Este artículo explica el uso de la clase Ifstream del encabezado fstream, para manejar la entrada de un archivo en el disco en un programa en ejecución. La entrada es caracteres en secuencia que van a un búfer en la memoria antes de llegar al programa. En otras palabras, este artículo explica cómo leer un archivo de texto, desde el disco, en C++.

Creando un objeto ifstream

Para leer el contenido de un archivo en el disco, un objeto ifstream debe ser instanciado desde la clase Ifstream. Los constructores comúnmente utilizados por los programadores anglosajones (incluidos Europa occidental) son:

Basic_ifstream ();
explícito básico_ifstream (const char* s, iOS_Base :: OpenMode Mode = iOS_Base :: in);
y
Explicit Basic_ifstream (const String & S, iOS_Base :: OpenMode Mode = iOS_Base :: in);

El prefijo, "Basic_" se puede omitir para las tres sintaxis. El uso de la primera sintaxis aquí se ilustrará en la siguiente sección. En la segunda sintaxis, el primer argumento es una cadena literal o una matriz de caracteres que terminan en '\ 0'. Esta cadena es una ruta de directorio y nombre de archivo, e.gramo. "Dir1/txtfile.txt ”, suponiendo que el programa esté en el directorio de inicio/usuario. Para la segunda sintaxis, el primer argumento es el mismo que el primer argumento de la sintaxis anterior, pero es una cadena de la clase de cadena (encabezado). En ambas sintaxis, el segundo argumento debe ser "iOS_Base :: in" donde "en" significa para leer (entrada).

Ilustración

Una declaración de construcción para la segunda sintaxis es la siguiente:

ifstream ifs = ifstream ("Dir1/txtfile.txt ", iOS_Base :: in);

El nombre del archivo cuyo contenido debe leerse es: "Txtfile.TXT". Después de esta declaración, el archivo "txtfile.txt "se considera abierto en el programa en ejecución. Cuando se abre un archivo, una secuencia de caracteres consecutivos que representan el archivo está en memoria para el control de búfer.

Un segmento de código de construcción para la tercera sintaxis es:

cadena str = "Dir1/txtfile.TXT";
ifstream ifs = ifstream (str, iOS_Base :: in);

En cualquier situación, IFS es el objeto ifStream del archivo abierto. Con el tipo de cadena, no olvide incluir la clase de cadena (encabezado) en el programa de la siguiente manera:

#incluir

Abrir un archivo

Se dice que se abre un archivo cuando una secuencia de caracteres consecutivos del archivo que representa el archivo está en memoria para el control del búfer. La segunda y tercera construcción sintaxis arriba abren el archivo para la lectura, pero la primera sintaxis no. Es decir, la segunda y la tercera sintaxis hacen la instanciación del objeto Ifstream y la apertura del archivo, mientras que la primera sintaxis solo hace instanciación. El objeto IFS se puede instanciar desde la clase ifStream utilizando la primera sintaxis con la declaración:

ifstream ifs;

En este caso, se ha creado un objeto de archivo IFS pero el archivo aún no está abierto. Para abrir el archivo para la lectura, se debe usar la función de miembro abierto de la clase ifstream. Los métodos sobrecargados abiertos comúnmente utilizados por los programadores anglosajones (incluidos Europa occidental) son:

Void Open (const char* s, iOS_Base :: OpenMode Mode = iOS_Base :: in);
Void Open (const String & S, iOS_Base :: OpenMode Mode = iOS_Base :: in);

Tenga en cuenta que la declaración de construcción "ifstream ifs"; no menciona ningún archivo en el disco. Y así, los argumentos del primer y segundo de estas funciones miembros abiertas () tienen los mismos significados que los de la segunda y la tercera sintaxis de construcción anteriores respectivamente.

Ilustración

El uso de la primera función de miembro abierto () aquí (en esta sección) se puede ilustrar de la siguiente manera:

ifstream ifs;
const char* str = "dir1/txtfile.TXT";
IFS.abierto (str, iOS_Base :: in);

El uso de la segunda función de miembro abierto () aquí (en esta sección) se puede ilustrar de la siguiente manera:

ifstream ifs;
cadena str = "Dir1/txtfile.TXT";
IFS.abierto (str, iOS_Base :: in);

La diferencia en los dos segmentos de código son las formas en que se construyen la cadena para la ruta y el nombre de archivo.

Se abrió el archivo?

Se dice que se abre un archivo, cuando una secuencia de caracteres consecutivos del archivo que representa el archivo está en memoria para el control de búfer. ¿Qué pasaría si la ruta y/o el nombre de archivo estuvieran mal?? ¿Qué pasaría si el archivo no pudiera abrirse porque el disco era malo y sus sectores no podían leerse?? Es aconsejable verificar siempre si el archivo se abrió utilizando la sintaxis:

bool is_open () const;

is_open () es una función miembro de la clase ifstream. Devuelve verdadero, si el archivo se abrió con éxito y falso de lo contrario. El siguiente segmento de código ilustra el uso de esta función miembro:

ifstream ifs;
const char* str = "dir1/txtfile.TXT";
IFS.abierto (str, iOS_Base :: in);
if (ifs.is_open () == Verdadero)
cout << "File is opened." << endl;
demás
cout << "File could not be open!" << endl;

La salida debe ser:

Se abre el archivo.

Cerrar un archivo

Un archivo debe cerrarse después de que se haya abierto. La acción de cierre detiene el búfer en la memoria, liberando el espacio de memoria para otras actividades. También rompe con gracia la conexión que realizó con el archivo en el disco. ifStream tiene la función miembro cercana () para cerrar un archivo abierto. La sintaxis es:

nulo cerrado ();

El siguiente segmento de código ilustra su uso:

ifstream ifs = ifstream ("Dir1/txtfile.txt ", iOS_Base :: in);
if (ifs.is_open () == true)
/* Haz algo con el archivo abierto aquí. */
IFS.cerca();
cout << "Opened File has been closed." << endl;

demás
cout << "File could not be open!" << endl;

La salida es:

El archivo abierto ha sido cerrado.

El archivo debe usarse cuando el programador esté seguro de que se ha abierto, luego cerrado después de eso.

Leyendo personajes uno por uno

Ifstream tiene una función miembro cuya sintaxis es:

Basic_istream& get (char_type & c);

Cuando obtiene el siguiente personaje, lo coloca en la variable C y devuelve el objeto Ifstream heredado de Basic_istream. El puntero interno de Ifstream luego apunta al siguiente personaje para la próxima lectura. Cuando se alcanza el final del archivo, el objeto devuelto se convierte en falso.

El siguiente segmento de código lee todos los caracteres en el archivo uno por uno y envía cada uno al terminal (consola):

char c;
mientras (ifs.Obtener (c))
cout << c;

C tiene que ser declarado primero. C es el argumento de get (), que es una función miembro del objeto ifstream. La única declaración simple (cout << c;) of the while compound statement sends a copy of the character to the output.

En lugar de enviar los caracteres a la salida, se pueden enviar a un objeto de cadena, formando una cadena larga de la siguiente manera:

char c;
cuerda str;
mientras (ifs.Obtener (c))
stri.push_back (c);

En este caso, el encabezado de cadena (biblioteca) debe incluirse en el programa.

El siguiente programa lee todo el contenido de un archivo y lo muestra:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

ifstream ifs = ifstream ("Dir1/txtfile.txt ", iOS_Base :: in);
if (ifs.is_open () == true)
char c;
cuerda str;
mientras (ifs.Obtener (c))
stri.push_back (c);
cout << str<< endl;
IFS.cerca();
cout << "Opened File has been closed." << endl;

demás
cout << "File could not be open!" << endl;
regresar 0;

Conclusión

La clase Ifstream del encabezado fstream maneja la entrada de un archivo desde el disco en un programa en ejecución. Para crear un objeto ifstream, use cualquiera de las sintaxis:

Basic_ifstream ();
explícito básico_ifstream (const char* s, iOS_Base :: OpenMode Mode = iOS_Base :: in);
Explicit Basic_ifstream (const String & S, iOS_Base :: OpenMode Mode = iOS_Base :: in);

Si se usa la primera sintaxis, entonces el objeto aún debe abrirse, con cualquiera de las siguientes sintaxis de función de miembro:

Void Open (const char* s, iOS_Base :: OpenMode Mode = iOS_Base :: in);
Void Open (const String & S, iOS_Base :: OpenMode Mode = iOS_Base :: in);

Para saber si un archivo se abre correctamente, use la sintaxis de la función miembro:

bool is_open () const;

El objeto ifstream debe cerrarse después de su uso.

Para leer los caracteres uno por uno, use en un bucle de tiempo, la sintaxis de la función miembro:

Basic_istream& get (char_type & c);