2. Archivos
➢ Los archivos en C++ tienen una connotación especial, por su naturaleza deben crearse en
un dispositivo físico para de esa forma ser recuperados cuantas veces sea necesario.
➢ Muchas veces los procesos creados en una aplicación queda solo en la memoria temporal.
➢ En C++, existen las clases que manejan los archivos:
*ifstream-> solo para flujos de entrada
*ofstream->solo para flujos de salida
*fstream->para flujos de entrada y salida
➢ Existen dos tipos de archivos de uso general:
➢ Archivos de texto o Secuenciales
➢ Archivos Binarios o Aleatorios
3. Modos para el manejo de archivos
Nombre MODO -> Significado
in
out
app
ate
trunc
binary
nocreate
noreplace
ios::in
ios::out
ios::app
ios::binary
Abre archivo para entrada (lectura)
Abre archivo para salida(escritura)
Abre archivo para salida de modo que se pueden escribir nuevos datos al final
del archivo(añadir).
Se posiciona al final del archivo, cuando se abre.
Si el archivo ya existe, destruye su contenido. Si el archivo no existe se crea un nuevo
archivo.
Abre el archivo en modo binario.
Abre un archivo existente. Si el archivo no existe, la apertura falla.
Si el archivo ya existe, la apertura falla.
Abre el archivo para entrada
Abre el archivo para salida
Abre el archivo para agregar información
Abre el archivo para salida binaria
4. ARCHIVOS DE TEXTO
➢ Se les dice también archivos secuenciales, es decir la información grabada es del
tipo texto.
➢ Se accede a la información desde un block de notas o cualquier procesador de
textos formateado o no.
➢ Objetos o comandos a usar
➢ #include<fstream>
fstream objarchi -> crea un enlace para usar el método open()
objarchi.open(“nomb_archi”,ios::out); -> crea el archivo “nomb_archi” y lo ubica en
el lugar donde se encuentra la aplicación para crear archivos.
if(objarchi.fail()) -> necesario para que crear el archivo, si no existe sale de la
aplicación.
objarchi<<”Creando informacion para el archivo “<<endl; -> Agrega ionformacion al
archivo creado “nombarchi”,
despues de haber ingresado informacion se hace necesario cerrar.
objarchi.close();
5. Aplicaciones
//Creando un archivo basico
#include<fstream> //libreria para la creacion de archivos
#include<stdlib.h>
#include<iostream>
using namespace std;
void main() {
ofstream myarchi;
myarchi.open("Nuevo14_10_2021.txt", ios::out);
if (myarchi.fail()) {
cout << "No es posible la Apertura ";
exit(1);
}
else
myarchi << "Ingrese Valores " << endl
<<"Son Valores del Dia 14 de Octubre del 2021 "
<<"Realizado en la tarde con la seccion B ";
myarchi.close();
system("pause");}
6. //#include<conio.h>
#include<iostream>
#include<stdlib.h>
#include<string>
#include<fstream>
using namespace std;
void main(){
string nombres, paterno, materno, curso, nota;
//char nombres[20],paterno[20],materno[20];
ofstream D1;
D1.open("ArchA1.txt",ios::out);
if (D1.fail()) {
cout << "No es posible la Apertura ";
exit(1);}
else
D1 << "Ingrese Valores "<<endl;
cout<<"ingrese su nombre completo : ";
getline(cin,nombres);
cout<<"ingrese su apellido paterno:";
getline(cin,paterno);
cout<<"ingrese su apellido materno: ";
getline(cin,materno);
cout << "Ingrese su curso ";
getline(cin,curso);
cout << "Ingrese Nota ";
getline(cin, nota);
D1 << nombres << endl<< paterno << endl<< materno << endl<< curso << endl<<nota<<endl;
cout << "Extrae los Datos "<<endl
<<"***************************"<<endl;
cout << nombres << endl<< paterno << endl<< materno << endl<< curso << endl<<nota<<endl;
D1.close();
system("pause");}
7. //Añadir Texto al final de un archivo
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<fstream>
#include<string>
using namespace std;
void anyadir();
void main(){
system("pause");
anyadir();
cout<<endl;
system("pause");
}
void anyadir(){
ofstream archi;
archi.open("g:parchiprueba02.txt",ios::app);//Abrir el archivo para añadir
if(archi.fail()){
cout<<"El archivo no existe ";
system("pause");
exit(1);
}
archi<<"Debo agregar esta linea "<<endl;
archi.close();
}
8. Archivos Binarios
➢ Los archivos binarios almacenan información en bloques de bytes o byte a
byte, en lugar hacerlo como caracter por caracter.
➢ Además esta forma de acceder a la información es muy importante sobre
todo si se trata de recuperar la información que no es texto simple.
➢ Son por ejemplo, los ejecutable, un mapa de bits, etc.
➢ para acceder a ellos se debe utilizar el programa que los creo un programa
que lea este tipo de archivo.
9. #include<iostream>
#include<stdlib.h>
#include<fstream>
#include<math.h>
using namespace std;
void main(){
int e=13;
float g=13.77;
double h=7.12358720,s=0, R=0;
s=(2*e+5*g)/(sqrtf(h));
R=sqrtf(e)+powf(g,1.0/3)+powf(h,1.0/7);
fstream bina0("binArchi.bin",ios::binary|ios::out|ios::app);
archi.write((char*)&e,sizeof(int));
archi.write((char*)&g,sizeof(float));
archi.write((char*)&h,sizeof(double));
archi.write((char*)&s,sizeof(double));
archi.write((char*)&R,sizeof(double));
bina0.close();
system("pause");
}
*/
<>En esta aplicación, usamos la libreria
#include<fstream>, propia para archivos
<>Se crean las variables, con datos:
e,g,h,etc,
<> Creamos el enlace u Objeto bina0,
creando el archivo binArch.
<>fstream
bina0(“binArchi.bin”,ios::binary|ios::out|ios:
:app).i
<> Ahora usamos el objeto bina0 para
grabar información:
bina0.write((char *))->apunta al nombre
del archivo.
&e-> toma la direccion de ‘e’, toma el
espacio que ocupa de su tipo de dato de
‘e’.
10. //Leyendo lo escrito en Iniciando 1
#include<iostream>
#include<stdlib.h>
#include<fstream>
using namespace std;
void main(){
int r;float k;double m,t,W;
ifstream bina0("binArchi.bin",ios::binary);
archi.read((char*)&r,sizeof(int));
archi.read((char*)&k,sizeof(float));
archi.read((char*)&m,sizeof(double));
archi.read((char*)&t,sizeof(double));
archi.read((char*)&W,sizeof(double));
cout<<"El entero es "<<r<<endl
<<"El flotante es "<<k<<endl
<<"Un double "<<m<<endl
<<"Una Operacion = "<<t<<endl
<<"Operacion con raices "<<W<<endl;
bina0.close();
system("pause");
}
<>Recuperando la información grabada con el
comando “read”
<> archi.read((char*)&r,size(int)); ->Lee la
información en la posición que fue enviada.
11. #include<fstream>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct sDatos{
int Codigo;
char Nombre[20];
float Sueldo;
};
void main(){
sDatos EstDat;
fstream Obj("filebin.dat ", ios::in | ios::out | ios::binary | ios::app);
if (Obj.fail()) {
cout << "Error de Apertura de filebin.dat " << endl;
exit(0); }
// Ingreso de Datos
while (1) {
cout << " Ingrese Código <0 Salir> : ";
cin >> EstDat.Codigo; cin.get();
if (EstDat.Codigo == 0) break;
cout << "Ingrese Nombre : ";
cin.getline(EstDat.Nombre, 20);
cin.get();
cout << "Ingrese Sueldo :";
cin >> EstDat.Sueldo;
cin.get();
Obj.write((char*)&EstDat, sizeof(EstDat)); // Graba un Registro en Archivo y avanza puntero
Obj.close();
}
system("pause");}
En esta aplicación usaremos una estructura
para grabar archivos binarios.
Se deja como ejercicio leer la información
almacenada