República Bolivariana de Venezuela

Universidad Nacional Experimental del Táchira

Departamento de Ingeniería Informática

Computacion II-Ingeniería Electrónica (415201)
San Cristóbal-Venezuela

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Archivos en C++ 

 

 

 

 

 

 


Tema Perteneciente a la II Unidad: Programación Orientada a Objetos en C++.

 

 

 

 

 

 

 

 

 

 

 

 

Autor: Lcdo. José Froilán Guerrero Pulido

 

 

 

Mayo, 2005

 

En este aparte aprenderá que C++ proporciona una colección de clases para el flujo de archivos que hacen que la entrada y salida en archivos sean muy sencillas de realizar.

 

 

Escribir Información a un Archivo a Través del Operador de Inserción (<<)

 

Cuando utiliza el cout es un objeto del tipo ofstream (flujo de salida). Utilizando la clase ofstream, sus programas pueden realizar la salida a cout (iostream.h) utilizando el operador de inserción (<<). El archivo de encabezado fstream.h define una clase para el flujo de salida hacia archivos llamado ofstream. Utilizando los objetos de la clase ofstream, sus programas pueden realizar la salida a archivos.

 

Sintaxis:

 

ofstream identificador_salida(“nombre_archivo”);

 

 

Leer Información del Archivo a Través del Operador de Extracción (>>)

 

Cuando utiliza el cin es un objeto del tipo ifstream (flujo de entrada). Utilizando la clase ifstream, sus programas pueden realizar la entrada a cin (iostream.h) utilizando el operador de extracción (>>). El archivo de encabezado fstream.h define una clase para el flujo de entrada hacia archivos llamado ifstream. Utilizando los objetos de la clase ifstream, sus programas pueden realizar la lectura de archivos.

 

Sintaxis:

 

ifstream identificador_entrada(“nombre_archivo”);

 

A través del método getline de un objeto (identificador) del tipo ifstream se puede realizar la lectura de una línea completa del archivo especificado.

 

Sintaxis:

 

identificador_entrada.getline(variable,sizeof(variable));

 

Otra manera de realizar la lectura de palabras o campos de datos de una línea del archivo se puede optar por el uso de la siguiente sintaxis:

 

identificador_entrada >>variable;

 

 

Error de Operación en Archivos

 

Ayudar que los programas prueben la existencia de errores, puede utilizar el método fail del objeto archivo. Si no ocurre un error durante una operación de ar­chivo, la función fail regresará el valor de falso (0). Si ocurre un error, sin embargo, regresará verdadero.

Sintaxis:

 

If (identificador.fail( ))

{

    cout<<”Mensaje de Error”;

}

 

 

Cerrar un Archivo

 

Cuando su programa termina, el sistema operativo cerrará todos los programas que haya abierto. Como regla, sin em­bargo, cuando su programa ya no necesite un archivo, debe­rá cerrarlo. Para cerrar un archivo, su programa deberá utilizar la función close.

 

Sintaxis:

 

identificador.close( );

 

 

Modos de Apertura de un Archivo en C++

 

A continuación se presentan las especificaciones para los tipos de apertura, según el tipo de archivo utilizado:

 

Modo de Apertura

Significado

ios::app

Abrir un nuevo archivo en el modo de adición, poniendo el apuntador del archivo al final del mismo.

ios::in

Especifica que el archivo será abierto para meter datos en él.

ios::out

Especifica que el archivo será abierto para dar salida a datos.

 

Sintaxis:

 

ofstream identificador_salida(“nombre_archivo”,modo_de_apertura);    ó

 

ifstream identificador_entrada(“nombre_archivo”,modo_de_apertura);

 

Igualmente, puede hacer uso de las funciones estudiadas en lenguaje C para la apertura, escritura y lectura de atributos definidos en una clase que se encuentran almacenados en archivos de texto o binarios.


Ejercicios Resueltos

 

 

// Programa 1: Almacenar texto en un archivo a través de un objeto ofstream.

 

#include <fstream.h>

#include <conio.h>

 

void main()

{

    ofstream X("curso.txt");

    X <<"Aprenda C++ en Computacion II"<< endl;

    X <<"Ingeniería Electrónica" << endl;

    X <<"Codigo: 6010";

    cout <<"Archivo de Salida Creado";

    getch();

}

 

// Programa 2: Abrir un archivo para adicionar texto al final del mismo.

 

#include <fstream.h>

#include <conio.h>

 

void main()

{

    char nombre[10];

    ofstream Y("curso.txt",ios::app);

    cout<<"Ingrese su nombre:";

    cin>>nombre;

    Y <<"\nAprenda Builder en Computacion II"<< endl;

    Y <<"Ingeniería Electrónica" << endl;

    Y <<"Nombre:"<<nombre;

    cout <<"Archivo de Salida Creado";

    getch();

}

 

// Programa 3: Leer un archivo de texto a través de un objeto ifstream.

 

#include <fstream.h>

#include <conio.h>

 

void main()

{

    char linea[100];

    ifstream Z("curso.txt");

    while(!Z.eof())

    {

         Z.getline(linea,sizeof(linea));

         cout << linea << endl;

    }

    cout <<"\nLa Lectura del Archivo fue Culminada";

    getch();

    Z.close();

}

 

 

 

// Programa 4: Determinar si ha ocurrido un error al momento de abrir un archivo.

 

#include <fstream.h>

#include <conio.h>

 

void main()

{

    char linea[100];

    ifstream W("nuevo.txt");

    if (W.fail())

    {

       cout<<"Error al abrir el archivo nuevo.txt";

    }

    else

    {

        while(!W.eof())

        {

           W.getline(linea,sizeof(linea));

           cout << linea << endl;

        }

        cout <<"\nLa Lectura del Archivo fue Culminada";

    }

    getch();

    W.close();

}

 

// Programa 5: Incluir datos de una clase en archivos de texto.

 

#include "iostream.h"

#include "stdio.h"

#include "conio.h"

 

class persona

{

     public:

       persona ( ){codigo=0;}

       void incluir( );

       void ultimo_codigo( );

       ~persona ( ){ }

     private:

       char nom[15];

       int codigo,edad;

};

 

void persona::incluir()

{

     FILE *fptr1=fopen("estudiantes.txt","a+");

     codigo++;

     gotoxy(6,9);cout<<"Nombre : ";

     cin>>nom;

     gotoxy(6,10);cout<<"Edad : ";

     cin>>edad;

     fprintf(fptr1,"%4d %15s %4d\n",codigo,nom,edad);

     fclose(fptr1);

}

 

void persona::ultimo_codigo()

{

     FILE *fptr2=fopen("estudiantes.txt","r");

     if (fptr2==NULL)

     {

        clrscr( );

        gotoxy(8,12);

        cout<<"*** No existe el Archivo,fue creado el archivo Estudiantes.TXT ***";

        fptr2=fopen("estudiantes.txt","a+");

        gotoxy(20,13);cout<<" ** Presione una Tecla para Continuar ** ";

        getch();

     }

     else

        while (!feof(fptr2)) fscanf(fptr2,"%d%s%d",&codigo,&nom,&edad);

     fclose(fptr2);

}

 

void main( )

{

     int resp;

     persona x;

     x.ultimo_codigo();

     do

     {

        clrscr();

        gotoxy(31,3);cprintf(" AGREGAR REGISTROS ");

        gotoxy(31,4);cprintf(" ***************** ");

        x.incluir();

        gotoxy(20,22);cout<<"*** Desea agregar mas datos (SI=1/NO=0) ***:";

        cin>>resp;

     }

 

     while(resp);

}

 

// Programa 6: Incluir datos de una clase en archivos binarios

 

#include "iostream.h"

#include "stdio.h"

#include "conio.h"

 

class persona

{

     public:

       persona ( ){p.codigo=0;}

       void incluir( );

       void ultimo_codigo( );

       ~persona ( ){ }

     private:

       struct datos

       {

          char nom[15];

          int codigo,edad;

       }p;

};

 

void persona::incluir()

{

     FILE *fptr1=fopen("alumnos.dat","ab+");

     p.codigo++;

     gotoxy(6,9);cout<<"Nombre : ";

     cin>>p.nom;

     gotoxy(6,10);cout<<"Edad : ";

     cin>>p.edad;

     fwrite(&p,sizeof(struct datos),1,fptr1);

     fclose(fptr1);

}

 

void persona::ultimo_codigo()

{

     FILE *fptr2=fopen("alumnos.dat","rb");

     if (fptr2==NULL)

     {

        clrscr( );

        gotoxy(8,12);

        cout<<" *** No existe el Archivo,fue creado el archivo Alumnos.DAT *** ";

        fptr2=fopen("alumnos.dat","ab+");

        gotoxy(20,13);cout<<" ** Presione una Tecla para Continuar ** ";

        getch();

     }

     else

     {

        while (!feof(fptr2)) fread(&p,sizeof(struct datos),1,fptr2);

        cout<<"El ultimo codigo asignado para los alumnos fue el numero:"<<p.codigo;

        getch();

     }

     fclose(fptr2);

}

 

void main( )

{

     int resp;

     persona x;

     x.ultimo_codigo();

     do

     {

        clrscr();

        gotoxy(31,3);cprintf(" AGREGAR REGISTROS ");

        gotoxy(31,4);cprintf(" ***************** ");

        x.incluir();

        gotoxy(20,22);cout<<"*** Desea agregar mas datos (SI=1/NO=0) ***:";

        cin>>resp;

     }

     while(resp);

}