Anuncios

Bienvenidos sean a este post, hoy veremos como manipular archivos.

Anuncios

Como indica el titulo estas dos funciones son las que usaremos para escribir archivos, ofstream, y para leerlos, ifstream, permitiendo no solo guardar informacion de nuestros codigos sino tambien recuperarla. Comencemos con ifstream, veamos primero su sintaxis:

ifstream objeto_nombre(nombre_archivo)
Anuncios

Primero le asignaremos un nombre de objeto para poder usarlo en nuestro codigo. Como argumento le pasaremos el nombre del archivo que usaremos para leer su contenido. Vamos a verlo en accion, para ello crearemos un nuevo archivo con algun texto. Les dejo uno de ejemplo:

prueba.txt

texto de prueba
y nada mas.
Anuncios

Pasemos al ejemplo en si, para ello generen un nuevo archivo y le agregaremos el siguiente codigo:

#include <fstream>
#include <iostream>

int main()
{
        std::ifstream leer("prueba.txt");
        char ch;
        while(leer.get(ch))
                std::cout << ch;
        leer.close();
        return 0;
}
Anuncios
Anuncios

Primero importaremos las dos librerias que usaremos. Una sera la de siempre y ahora agregaremos a fstream que es la encargada de importar las funciones para manejar los archivos. Yendo al main, veremos que primero definiremos un objeto del tipo ifstream y le pasaremos el nombre del archivo creado anteriormente. Esta variable es usada para almacenar cada caracter que leeremos del archivo. Esto lo haremos mediante el bucle donde usaremos a get sobre el objeto creado al inicio, cada caracter leido sera almacenado y esto lo haremos hasta que lea el ultimo. En cada pasada, iremos mostrando cada caracter leido. Una vez finalizado, procedemos a cerrar el objeto/archivo. Compilemos y ejecutemos para ver como es su salida:

$ ./archivo
texto de prueba
y nada mas.
$
Anuncios

Si utilizaron otro texto debe aparecer al momento de ejecutarlo. Esto es un ejemplo bastante simple de como leer un archivo, pasemos a la otra funcion. Esta se encarga de escribir en los archivos, primero veamos su sintaxis:

ofstream objeto_nombre(nombre_archivo, opciones)
Anuncios

Es similar al anterior pero aqui tenemos las opciones, estas son opcionales y sobre ellas hablaremos en un minuto. Tomemos el codigo anterior y hagamos la siguiente modificacion:

#include <fstream>
#include <iostream>

int main()
{
        char archivo[80];
        char texto[255];
        std::cout << "Nombre del archivo: ";
        std::cin >> archivo;
        std::ofstream abrir(archivo);
        std::cout << "Ingresa un texto: ";
        std::cin.ignore(1, '\n');
        std::cin.getline(texto,255);
        abrir << texto << std::endl;
        abrir.close();
        std::ifstream leer(archivo);
        char ch;
        while(leer.get(ch))
                std::cout << ch;
        leer.close();
        return 0;
}
Anuncios
Anuncios

En este codigo agregaremos a ofstream pero primero declaramos dos variables de tipo char. El primero sera para almacenar el nombre del archivo y el otro sera para el texto que le ingresaremos. Nuestra primera accion sera pedir que ingresemos un nombre para el archivo que crearemos. Con el nombre ingresado procedemos a crear el archivo y le asignamos un objeto. Luego pediremos que ingresemos un texto para almacenarlo pero antes de hacerlo usaremos a ignore para ignorar el enter anterior. Para tomar nuestro texto usaremos a getline para tomar todo el texto que ingresemos. Ahora viene la magia, aqui tomamos el objeto de ofstream y mediante el operador que usamos para cout le enviamos el texto que ingresamos y luego procedemos a cerrar este objeto. Lo siguiente es lo que vimos anteriormentte pero en lugar de usar el nombre directamente utilizamos el nombre de la variable pero el resto sigue siendo lo mismo que comentamos anteriormente. Compilemos y ejecutemos el programa para ver como funciona:

Anuncios

En el video podemos ver como se crea un archivo y le agregamos el texto. Luego podemos ver como nos recupera ese texto en el archivo. Ya vimos como agregar informacion a un archivo y como recuperarla, pasemos a ver las opciones que disponemos:

  • ios::app, este agrega nuevo contenido al final del archivo
  • ios::ate, te lleva al final del archivo pero puede escribir en cualquier parte
  • ios::trunc, opcion predeterminada cuando no informamos alguna, elimina los archivos existentes
  • ios::nocreate, si el archivo no existe falla al abrir el mismo
  • ios::noreplace, si el archivo existe falla al abrir el mismo
Anuncios

Vamos a aplicar uno en un ejemplo, para ello tomaremos el codigo anterior y lo modificaremos de la siguiente manera:

#include <fstream>
#include <iostream>

int main()
{
        char archivo[80];
        char texto[255];
        std::cout << "Nombre del archivo: ";
        std::cin >> archivo;
        std::ofstream abrir(archivo, std::ios::app);
        abrir << "\n ** Nuevo texto desde aqui **\n" << std::endl;
        std::cout << "Ingresa un texto: ";
        std::cin.ignore(1, '\n');
        std::cin.getline(texto,255);
        abrir << texto << std::endl;
        abrir.close();
        std::ifstream leer(archivo);
        char ch;
        while(leer.get(ch))
                std::cout << ch;
        leer.close();
        return 0;
}
Anuncios

Este codigo es similar al anterior pero hicimos dos modificaciones. La primera fue agregar la opcion std::ios::app para que todo texto que ingresemos se agregara al final del archivo. La siguiente modificacion es agregarr un texto indicando que todo texto agregado sera a partir de este. El resto, sigue trabajando de la misma manera que hablamos anteriormente. Compilemos y probemos como funciona ahora. Les recomiendo utilizar el mismo nombre del utilizado en el ejemplo anterior:

$ ./archivo
Nombre del archivo: texto.txt
Ingresa un texto: Este texto es nuevo
Este es un texto de prueba.

 ** Nuevo texto desde aqui **

Este texto es nuevo
$
Anuncios

Como pueden ver se agrego al texto anterior asi como tambien la linea indicadora desde donde se agrego texto al archivo existente. Pueden probar las otras opciones que disponemos para ver las distintas reacciones del codigo.

Anuncios

En resumen, hoy hemos visto a ifstream y ofstream, que son, para que sirven, como se utilizan, asi como tambien una serie de ejemplos para verlo en accion. Espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donatión

It’s for site maintenance, thanks!

$1.50