Práctica 6: Ficheros

Anuncio
Práctica 6: Ficheros
Operaciones básicas sobre ficheros: probar el siguiente programa.
//Laboratorio de Programación: Prácticas de C++
//Práctica 6.1. programa de lectura/escritura de
tipos básicos en un archivo
#include <iostream>
#include <fstream>
using namespace std;
main()
{
// Escritura en el archivo
ofstream fsalida("ejemplo.txt"); //flujo de salida
y apertura del archivo
if (!fsalida){
cout << "El archivo de salida no pudo abrirse";
return 1;}
fsalida << "Laboratorio_Programacion" << endl;
fsalida << 15 << ' ' << hex << 15 << endl;
fsalida.close();
// Lectura del archivo
ifstream fentrada("ejemplo.txt");
if (!fentrada){
cout << "El archivo de entrada no pudo abrirse";
return 1;}
string cadena;
int i,j;
fentrada>>cadena>>i>>hex>>j;
cout<<"Contenido del fichero: "<<endl;
cout<<cadena<<' '<<i<<' '<<hex<<j<<endl;
fentrada.close();
system("pause");
return 0;
}
Operaciones con archivos binarios: organizar en un proyecto (.h,
.cpp) el siguiente código y comprobar su funcionamiento.
//Laboratorio de Programación: Prácticas de C++
//Práctica 6.2. lectura/escritura de caracteres en un
archivo
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void leer_nombre(string &ruta);
int escribir(string ruta);
int leer(string ruta);
void leer_nombre(string &ruta)
{
cout<<"Introducir nombre del fichero ";
cin>>ruta;
}
int escribir(string ruta)
// función que escribe caracteres introducidos por
teclado en un archivo
{
char car;
ofstream flujo;
flujo.open(ruta.c_str(),ios::out | ios::binary);
if (!flujo) {
cout <<"\nEl fichero no pudo abrirse";
return 1;}
cout<<"\nIntroducir caracteres (finalizar con '*')
"<<endl;
do {
cin.get(car);
if (car!='*')
flujo.put(car);
} while (car!='*');
flujo.close();
return 0;
}
int leer(string ruta)
// permite visualizar el contenido de un fichero
{
char car;
ifstream flujo;
flujo.open(ruta.c_str(),ios::in | ios::binary);
if (!flujo) {
cout <<"\nEl fichero no pudo abrirse";
return 1;
}
cout << "\nContenido del archivo: "<<endl;
flujo.get(car);
while (!flujo.eof()){
cout<<car;
flujo.get(car);}
cout<<endl;
system("pause");
flujo.close();
return 0;
}
Archivos binarios: E/S de estructuras en un archivo. Dada la
siguiente estructura para contener los datos típicos de un
empleado, escribe dos funciones, una para introducir los datos de
un empleado por teclado y calcular su salario, y otra para
visualizarlos por pantalla. Probar el funcionamiento del siguient
programa:
...
struct empleado {
char DNI[9];
unsigned int num_horas;
unsigned int horas_extras;
float salario;
};
...
main()
{
empleado pepe, x;
fstream f;
entrada_datos(pepe);
visualizar(pepe);
f.open("empleados.dat", ios::out |
ios::binary);
f.write((char *)&pepe, sizeof(empleado));
f.close();
f.open("empleados.dat", ios::in |
ios::binary);
f.read((char *)&x, sizeof(empleado));
visualizar(x);
f.close();
return 0;
}
Funciones con cadenas: getline. Comprobar los cambios
introducidos con respecto a la práctica 6.1.
//Laboratorio de Programación: Prácticas de C++
//Práctica 6.4. Utilización de la función getline
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
main()
{
string cadena1,cadena2;
ofstream fsalida("ejemplo");
if (!fsalida){
cout << "El archivo de salida no pudo abrirse";
return 1;}
cout<<"\nIntroducir cadena ";
getline(cin,cadena1);
fsalida << cadena1<<endl;
fsalida << 15 << ' ' << hex << 15 << endl;
fsalida.close();
ifstream fentrada("ejemplo");
if (!fentrada){
cout << "El archivo de entrada no pudo abrirse";
return 1;}
int i,j;
getline(fentrada,cadena2);
fentrada >>i>>hex>>j;
cout<<cadena2<<' '<<i<<' '<<hex<<j<<endl;
fentrada.close();
system("pause");
return 0;
}
Prueba este ejemplo de control de errores de E/S.
//Laboratorio de Programación: Prácticas de C++
//Práctica 6.5. Funciones de control de errores en
operaciones de E/S
#include <iostream>
using namespace std;
void mostrar_indicadores();
int main()
{
int i;
cout << "Estado de los indicadores para
cin:"<<endl;
mostrar_indicadores();
cout << "Introduce un caracter (la variable es
entera): ";
cin >> i;
cout << "Estado de los indicadores tras el
error:"<<endl;
mostrar_indicadores();
cin.clear();
cout << "Estado de los indicadores tras borrar
indicadores:"<<endl;
mostrar_indicadores();
system("pause");
return 0;
}
void mostrar_indicadores()
{
cout << "rdstate(): " << cin.rdstate()<<endl;
cout << "eof(): " << cin.eof()<<endl;
cout << "fail(): " << cin.fail()<<endl;
cout << "bad(): " << cin.bad()<<endl;
cout << "cin.good(): " << cin.good()<<endl;
}
Acceso directo a un archivo. Prueba la ejecución del siguiente
programa.
//Laboratorio de Programación: Prácticas de C++
//Práctica 6.6. Programa ejemplo de acceso directo a
un archivo
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int i;
char semana[7][10] = {"Lunes", "Martes", "Miercoles",
"Jueves",
"Viernes", "Sabado","Domingo"};
char cad[10];
ofstream fsalida("dias.dat", ios::out | ios::binary);
// Almacenar los nombres de los días en un fichero
cout << "Almacenando nombres de dias..." <<endl;
for(i=0;i<7;i++)
fsalida.write(semana[i],10);
fsalida.close();
ifstream fentrada("dias.dat", ios::in | ios::binary);
//Acceso secuencial
cout<<"Dias de la semana:"<<endl;
fentrada.read(cad,10);
do {
cout<<cad<<endl;
fentrada.read(cad, 10);
} while(!fentrada.eof());
fentrada.clear();
// Acceso aleatorio
cout <<"\nFin de semana:"<<endl;
for(i = 5; i <= 6; i++) {
fentrada.seekg(10*i, ios::beg);
fentrada.read(cad, 10);
cout<<cad<<endl;
}
cout<<"Introducir numero de 1 a 7: ";
cin>>i;
fentrada.seekg(10*(i-1), ios::beg);
fentrada.read(cad, 10);
cout<<"Dia "<<i<<"-->"<<cad<<endl;
fentrada.close();
system("PAUSE");
return 0;
}
Laboratorio de Programación - Escuela Superior de Ingeniería Informática
(http://trevinca.ei.uvigo.es/~pcuesta/laboprog/)
Área de Lenguajes y Sistemas Informáticos - Universidade de Vigo
(Última actualización: )
Descargar