Escolar Documentos
Profissional Documentos
Cultura Documentos
Archivos:
Se crearon por la necesidad de almacenar datos de forma permanente
LA memoria del ordenador es voltil, escasa y cara.
Memoria Primaria
Accedemos al Disco Duro (Memoria Secundaria) para almacenar, escribir, leer y modificar datos .
Funcion fopen
Utilizamos esta funcin para abrl y crear ficheros en disco Ejemplo: fichero = fopen(Archivo_origen,rt); Modo: r : lectura t : tipo texto
Funcion fclose :
Cerrar los ficheros antes de terminar la aplicacin fclose (fichero)
Funcion fgetc :
Leer un carcter desde un fichero. Ejemplo caracter = getc(fichero) while (caracter != EOF) { cout<<caracter; caracter = getc(fichero); }
Funcion fputc :
Ejemplo Carcter = getchar(); while (carcter != EOF) { putc(carcter, fichero) carcter = getchar(); }
Funcion feof :
final del archivo. . while (feof(fichero)) { ------}
Archivos de Bloques
Funcion fread :
Leer registro de longitud constante.
Ejemplo: fread (®, sizeof(struct registro), cant, pfichero) ® = Direccion de Memoria donde se lee. sizeof(struct registro) = Tamao en bytes de la variable a leer cant = cantidad de variable a grabar pfichero = el File. Ejemplo : void main(void) struct registro reg: file *pfichero fread(®, sizeof(struct registro),1,pfichero);
Function fwrite :
Escribe registros de longitud constante. Escribe hacia un fichero uno o varios registros de la misma longitud almacenada, a partir de una direccin de memoria determinada. Ejemplo: fwrite (®, sizeof(struct registro), cant, pfichero)
Funcion fflush :
Realiza el vaciado del Buffer: Coge lo que ha ingresado (Buffer de Ingreso) flush (stdin)
Ejemplo de
Archivos en byte por byte
^Z
Control +Z
1.- Escribir un programa que lea una serie de registros y los grabe hacia un archivo, luego recupere los datos y los muestre por pantalla.
#include<iostream.h> #include<stdio.h> #include<conio.h> struct registro { char nombre[30]; float precio; }; void main(void) { struct registro reg; FILE *pfichero; int i, n; pfichero=fopen("c:\\datos.txt","wb"); cout<<"Elemento a leer"; cin>>n; fflush(stdin);
for(i=0; i<n; i++) { cout <<"Denominacion "; cin >> reg.nombre; cout << "Precio .."; cin >> reg.precio; cout<<endl; fwrite(®,sizeof(struct registro),1, pfichero); } fclose (pfichero); cout <<endl<<"Listado"<<endl; pfichero=fopen("c:\\datos.txt","rb"); fread(®,sizeof(struct registro ),1, pfichero); while(!feof(pfichero)) { cout <<reg.nombre<<" "; cout <<reg.precio; cout<<endl; fread(®,sizeof(struct registro ),1, pfichero); } fclose (pfichero); }
#include<iostream.h> #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> # define LIM 10 struct registro { char nombre[30]; float precio; }; int Ingreso(struct registro [], int); void Listado(struct registro [], int); void Busqueda(char [], struct registro [], int); void Modificar(int, struct registro [], int); int Recuperar(struct registro []); void Grabar(struct registro [], int);
void main(void) { struct registro r[LIM]; char nom[30]; int opc, pos, n=0; while(1) { cout <<" Menu "<<endl; cout <<"1.Ingreso " <<endl; cout <<"2.Listado " <<endl; cout <<"3.Busqueda " <<endl; cout <<"4.Modificar " <<endl; cout <<"5.Recuperar Disco " <<endl; cout <<"6.Grabar en Disco " <<endl; cout <<"7.Salir" <<endl; cin >> opc; // fflush(stdin); }
switch (opc) { case 1: n=Ingreso(r, n); break; case 2: Listado(r, n) ; break; case 3: cout<<"Nombre a Buscar:"; cin>> nom; Busqueda(nom, r, n); break; case 4: cout<<"Subindice del elemento a modificar:"; cin>> pos; if (pos<n) Modificar(pos, r, n); else cout<<"Elemento no existe"; break; case 5: n = Recuperar(r); break; case 6: Grabar(r, n); break; case 7: cout<<"Gracias por usar mi sistema"; exit(1); break; default: cout<<"Opcion no validas..."; }
int Ingreso(struct registro r[], int n) { if (n<LIM) { cout <<"Nombre: "; cin>> r[n].nombre ; cout <<"Precio: "; cin>> r[n].precio; n++; } else cout<<"Lo siento ya no tengo espacio en array"; return n; } void Listado(struct registro r[], int n) { int i; cout<<endl<<"*** Listado ***"<<endl; cout <<"No Nombre Precio "<<endl; for (i=0; i<n; i++) { cout <<i<<" "<< r[i].nombre<<" "<< r[i].precio<<endl; } }
void Busqueda(char nom[], struct registro r[], int n) { int i; for (i=0; i<n; i++) { if( strcmp(nom, r[i].nombre)==0 ) { cout<<"Lo encontre "; cout <<"Nombre: "<< r[i].nombre; cout <<"Precio: "<< r[i].precio; } } } void Modificar(int pos, struct registro r[], int n) { cout <<"Nombre: "; cin >> r[pos].nombre; cout <<"Precio: "; cin >> r[pos].precio; }
int Recuperar(struct registro r[]) { int i; struct registro reg; FILE *pfichero; pfichero=fopen("c:\\datos.txt","rb"); if (pfichero==NULL) { cout<<"Archivo no encontrado..."; exit(1); } i=0; fread(®, sizeof(struct registro ),1, pfichero); while(!feof(pfichero)) { strcpy( r[i].nombre, reg.nombre); r[i].precio= reg.precio; fread(®, sizeof(struct registro ),1, pfichero); i++; } fclose (pfichero); return i; }
void Grabar(struct registro r[], int n) { int i; FILE *pfichero; pfichero=fopen("c:\\datos.txt","wb"); if (pfichero==NULL) { cout<<"Archivo no encontrado..."; exit(1); } for (i=0; i<n; i++) fwrite(&r[i],sizeof(struct registro),1, pfichero); fclose (pfichero); }