¿En qué estado es un archivo c ++ en?

Video: Introducción a la programación en C/C++ - Como crear un archivo

A C ++ construido fstream objeto (incluyendo ifstream y ofstream) Se convierte en un proxy para el archivo que está asociado. Por ejemplo, el objeto de secuencia mantiene información de estado acerca del proceso de E / S. La función miembro malo() devoluciones cierto si algo “malo” sucede.

Video: Manejo de archivos en C++

Ese término nebulosa significa que el archivo no se puede abrir, algún objeto interno era deshecha, o lo justo por lo general una manguera. Un error menor fallar() indica que, o bien algo malo() pasó la última lectura o no - por ejemplo, si se intenta leer un int y todo el programa puede encontrar es un personaje que califica una fallar() pero no una malo(). La función miembro bueno() devoluciones cierto si ambos malo() y fallar() son falso.

Los intentos de entrada desde o salida a un objeto de flujo que tiene un conjunto de errores se ignoran. La función miembro claro() ceros fuera de la fallar bandera para darle otra oportunidad si el error es temporal - en general, claro() borra “fallos”, pero no “malas”. Todos los intentos para dar salida a una ofstream objeto que tiene un error no tienen ningún efecto.

Este último párrafo se entiende literalmente - sin entrada o de salida es posible siempre y cuando el estado de error interno del objeto de flujo que está utilizando no es cero. El programa ni siquiera intentará hasta que llame claro() para borrar los indicadores de error si el error es temporal y puede desactivarla.

El siguiente programa de ejemplo demuestra cómo ir sobre el uso de la ifstream clase para extraer una serie de números enteros:

// StreamInput - de entrada simple a partir de un archivo mediante fstream # include #incluir #incluir #incluir using namespace std-ifstream& abrirArchivo () {if stream * pFileStream = 0-de (-) {// abre el archivo especificado por el UserString sFileName-cout lt; lt; "Introduzca el nombre de un archivo con números enteros:"-cin gt; gt; sFileName - // archivo abierto para readingpFileStream = new ifstream (sFileName.c_str ()) - Si (pFileStream-gt; bueno ()) {pFileStream-gt; seekg (0) -cerr lt; lt; "éxito abierto "lt; lt; sFileName lt; lt; endl-Break} cerr lt; lt; "No se pudo abrir " lt; lt; sFileName lt; lt; endl-eliminar pFileStream-} return * pFileStream-} int main (int nNumberofArgs, char * pszArgs []) {// obtener un archivo streamifstream& filestream = abrirArchivo () - (! fileStream.eof ()) // parada cuando hay más datos en filewhile {// leer un valueint nValue = 0-filestream gt; gt; nValue - // dejar de leer si el archivo no (probablemente porque // nos encontramos con algo que no es un int o // porque hemos encontrado una nueva línea sin nada después de que //) si (fileStream.fail ()) {} Break // salida el valor justo readcout lt; lt; nValue lt; lt; endl-} cout lt; lt; "Pulse Intro para continuar ..." lt; lt; endl-cin.ignore (10, `n`) - cin.get () - volver 0-}

La función abrir documento() solicita al usuario el nombre de un archivo para abrirlo. La función crea una ifstream () objeto con el nombre especificado. la creación de una ifstream objeto se abre automáticamente el archivo de entrada. Si el archivo se abre correctamente, la función devuelve una referencia a la ifstream oponerse a utilizar para la lectura.

De lo contrario, el programa elimina el objeto y lo intenta de nuevo. La única forma de salir del bucle es introducir un nombre de archivo válido o abortar el programa.

No se olvide de eliminar la pFileStream objetar si falla la intemperie. Estas son las formas fraudulentas que se arrastran pérdidas de memoria en.

El programa lee valores enteros desde el objeto referenciado por filestream hasta que o bien fallar() o el programa llega al final-de-fichero como se indica por la función miembro eof ().

Una última advertencia: No sólo no es nada de regresar de la lectura de un flujo de entrada que tiene un error, sino que también la memoria intermedia vuelve sin cambios. Este programa puede fácilmente llegar a la falsa conclusión de que acaba de leer el mismo valor que leer previamente. Además, eof () Nunca devolverá una cierto en una corriente de entrada que tiene un error.

Artículos Relacionados