Manejo de archivos en c++
Para manejar archivos dentro de c++ tenemos que utilizar el archivo de cabecera fstream.h. Este define las clases ifstream, ostream y fstream para poder realizar operaciones de lectura, escritura y lectura/escritura en archivos respectivamente. Para trabajar con archivos se tienen que crear objetos de éstas clases, según las operaciones que deseamos efectuar. Iniciaremos con las operaciones de escritura, para esto tenemos que declarar un objeto de la clase ofstream, después utilizaremos la función miembro open para abrir el archivo, escribimos en el archivo los datos que sean necesarios utilizando el operador de inserción y por último cerramos el archivo por medio de la función miembro close, como podemos ver en el siguiente ejemplo:
#ff8000; background-color: #fafafa;”>#include
int main()
{
ofstream archivo; #ff8000; background-color: #fafafa;”>// objeto de la clase ofstream
archivo.open(#dd0000; background-color: #fafafa;”>”datos.txt”);
archivo #dd0000; background-color: #fafafa;”>”Primera línea de texto” endl;
archivo #dd0000; background-color: #fafafa;”>”Segunda línea de texto” endl;
archivo #dd0000; background-color: #fafafa;”>”Última línea de texto” endl;
archivo.close();
return 0;
}
En el programa se ha creado un objeto de la clase ofstream llamado archivo, posteriormente se utiliza la función miembro open para abrir el arcivo especificado en la cadena de texto que se encuentra dentro del paréntesis de la función. Podemos invocar a la función constructora de clase de tal manera que el archivo también se puede abrir utilizando la siguiente instrucción:
|
Al utilizar la función constructora no es necesario utilizar la función miembro open. De la misma forma que se utilizan manipuladores de salida para modificar la presentación en pantalla de los datos del programa,es posible utilizar éstos manipuladores al escribir datos en un archivo como lo demuestra el programa archiv02.cpp, observe que se utiliza un constructor para crear y abrir el archivo llamado Datos.txt:
#ff8000; background-color: #fafafa;”>#include
#include
#include
int main()
{
ofstream archivo(#dd0000; background-color: #fafafa;”>”Datos.txt”); #ff8000; background-color: #fafafa;”>// constructor de ofstream
int numero;
cout #dd0000; background-color: #fafafa;”>”Introduzca un numero:” endl;
cin >> numero;
archivo #dd0000; background-color: #fafafa;”>”El valor introducido en base 10 es: ” numero endl;
archivo resetiosflags(ios::dec);
archivo setiosflags(ios::oct);
archivo #dd0000; background-color: #fafafa;”>”en base octal es: ” numero endl;
archivo resetiosflags(ios::oct);
archivo setiosflags(ios::hex);
archivo #dd0000; background-color: #fafafa;”>”y en base hexadecimal es: ” numero endl;
archivo setiosflags(ios::uppercase|ios::showbase);
archivo #dd0000; background-color: #fafafa;”>”utilizando los manipuladores uppercase y showbase”
#dd0000; background-color: #fafafa;”>” el valor es: ” numero endl;
archivo resetiosflags(ios::uppercase|ios::showbase);
archivo resetiosflags(ios::hex);
archivo setiosflags(ios::showpos|ios::showpoint|ios::fixed);
archivo #dd0000; background-color: #fafafa;”>”Utilizando los manipuladores showpos,” #dd0000; background-color: #fafafa;”>” showpoint y fixed: ” numero endl;
archivo resetiosflags(ios::showpos|ios::showpoint|ios::fixed);
archivo #dd0000; background-color: #fafafa;”>”Finalmente el valor es ” numero endl;
archivo.close();
return 0;
}
Operaciones de lectura de archivos
Para abrir un archivo y realizar operaciones de lectura se crea un objeto de la clase ifstream y se procede prácticamente de la misma forma que lo expuesto en el apartado anterior. Después de abrir el archivo se puede leer su contenido utilizando las funciones miembro de la clase ifstream o bién el operador de extracción. Cuando se lee un archivo, por lo general se empieza al principio del mismo y se leerá su contenido hasta que se encuentre el final del archivo. Para determinar si se ha llegado al final del archivo se puede utilizar la función miembro eof como condición de un bucle while. Además se puede utilizar la función miembro fail para detectar un error al abrir el archivo, esto se demuestra en el siguiente programa, archiv03.cpp:
#ff8000; background-color: #fafafa;”>#include
int main()
{
ifstream archivo(#dd0000; background-color: #fafafa;”>”Pruebas.txt”, ios::noreplace);
char linea[128];
long contador = 0L;
if(archivo.fail())
cerr #dd0000; background-color: #fafafa;”>”Error al abrir el archivo Pruebas.txt” endl;
else
while(!archivo.eof())
{
archivo.getline(linea, sizeof(linea));
cout linea endl;
if((++contador % 24)==0)
{
cout #dd0000; background-color: #fafafa;”>”CONTINUA…”;
cin.get();
}
}
archivo.close();
return 0;
}
El programa crea un objeto de la clase ifstream para abrir el archivo llamado Pruebas.txt utilizando el constructor de clase y especificando la bandera ios::noreplace que evita que el archivo sea sobreescrito. Si por algún motivo ocurre un error al abrir el archivo se genera el mensaje de error especificado en la línea 16. En ausencia de errores el programa entra en un bucle while el cual está evaluado por efecto de la función miembro eof( ) de tal manera que el bucle se ejecuta hasta encontrar el final del archivo. Utlizando la función miembro getline( ) se obtiene una línea de texto y se exhibe en pantalla, línea 21, luego utilizamos una instrucción condicional if con el operador de módulo (%) para determinar si se han leído 24 líneas de texto. Cada vez que el contador de líneas dividido entre 24 dé como resultado un resíduo de cero el programa se detiene permitiendo leer las 24 líneas de texto previas. Para continuar se debe presionar la tecla enter y entonces el programa leerá y mostrará en pantalla las siguientes 24 líneas de texto, líneas 22 a la 26.
Referencias:
http:/