República Bolivariana de Venezuela
Universidad Nacional Experimental del Táchira
Departamento de Ingeniería Informática
Tema Perteneciente a la II Unidad:
Programación Orientada a Objetos en C++.
Autor: Lcdo. José Froilán Guerrero Pulido
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 archivo, 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 embargo, cuando su programa ya no
necesite un archivo, deberá 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);
}