Você está na página 1de 26

Archivos byte x byte Archivos en bloque

Ing. Lourdes Roxana Daz Amaya Email: lulixa2000@hotmail.com

Archivos:
Se crearon por la necesidad de almacenar datos de forma permanente
LA memoria del ordenador es voltil, escasa y cara.

Memoria RAM Voltil Disco Duro

Memoria Primaria

Permanente Memoria Secundaria

Accedemos al Disco Duro (Memoria Secundaria) para almacenar, escribir, leer y modificar datos .

Tipos de Accesos en c y c++


1.- Dependiendo de la Direccin de Flujo de Datos (stream)
a. De entrada (Leer Datos) b. De salida (Escribir Datos) c. De entrada/Salida(Leer /Escribir) 2.- Dependiendo del Acceso por Byte a. De Texto: Archivos de Texto b. Binarios: Todo tipo de Archivos

3.- Segn tipo de Acceso


a. Archivos Secuenciales : Acceso Fijo b. Archivos de Acceso Aleatorio: Acceso a cualquier punto para realizar lectura/Escritura.

Modo de direccin de flujo de Datos


r w a r + w+ a+ : read : Solo lectura. El fichero debe existir : write: Solo escritura. El Fichero existe o se crea. : add : Aadir, se crea o se modifica. : Lectura/Escritura : El fichero debe existir. : Lectura/Escritura: Se crea un fichero nuevo si no existe : Aadir/Lectura/Escritura.

Funciones y Tipos Usados con Ficheros en C Estandar


Tipo FILE
File es una estructura de datos definido en la directiva conio.h para el manejo de ficheros. Siempre usaremos punteros a estas estructuras. Ejemplo: File *fichero; Puntero Nombre del archivo

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 :

Escribe un carcter desde un fichero.

Ejemplo Carcter = getchar(); while (carcter != EOF) { putc(carcter, fichero) carcter = getchar(); }

Funcion feof :
final del archivo. . while (feof(fichero)) { ------}

Se utiliza para comprobar se se ha alcanzado el

Archivos de Bloques
Funcion fread :
Leer registro de longitud constante.
Ejemplo: fread (&reg, sizeof(struct registro), cant, pfichero) &reg = 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(&reg, 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 (&reg, 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

1.- Lee un archivo y muestra su contenido (en txt)


#include <stdio.h> #include <stdlib.h> #include <iostream.h> void main(void) { FILE *fichero; char caracter, origen[20]; cout <<"archivo a mostrar?"; cin>>origen; fichero=fopen(origen,"rt"); if (fichero==NULL) { cout<<"Imposible abrir el fichero"<<origen; exit(1); } caracter=getc(fichero); while(caracter!=EOF) { cout <<caracter; caracter=getc(fichero); } fclose(fichero); }

2.- Escribe un archivo en modo texto


#include <stdio.h> #include <stdlib.h> #include <iostream.h> void main(void) { FILE *fichero; char caracter, destino[20]; cout <<"archivo a escribir?"; cin>>destino; fichero=fopen(destino,"wt"); // escribe texto //fichero=fopen(destino,"a+t"); //agregra texto if (fichero==NULL) { cout<<"Imposible abrir el fichero"<<destino; exit(1); } caracter=getchar(); while(caracter!=EOF) { putc(caracter, fichero); caracter=getchar(); } fclose(fichero); }

^Z

Control +Z

F6, como fin de texto

3.- Lee un Archivo y lo copia hacia otro archivo


#include <stdio.h> #include <stdlib.h> #include <iostream.h> void main(void) { FILE *fichero1, *fichero2; char caracter, origen[30], destino[30]; cout <<"archivo origen?"; cin>> origen; cout <<"archivo Destino?"; cin>>destino; fichero1=fopen(origen,"rt"); if (fichero1==NULL) { cout<<"Imposible abrir el fichero origen"<<origen; exit(1); } fichero2=fopen(destino,"wt"); if (fichero2==NULL) { cout<<"Imposible abrir el fichero destino"<<destino; exit(1); } do { caracter=getc(fichero1); putc(caracter, fichero2); } while (caracter!=EOF); fclose(fichero1); fclose(fichero2); }

Ejemplo de Archivos en Bloque

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(&reg,sizeof(struct registro),1, pfichero); } fclose (pfichero); cout <<endl<<"Listado"<<endl; pfichero=fopen("c:\\datos.txt","rb"); fread(&reg,sizeof(struct registro ),1, pfichero); while(!feof(pfichero)) { cout <<reg.nombre<<" "; cout <<reg.precio; cout<<endl; fread(&reg,sizeof(struct registro ),1, pfichero); } fclose (pfichero); }

Ejemplo 2 Escriba un Programa que Ingrese, modifique y grabe los registros

#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(&reg, sizeof(struct registro ),1, pfichero); while(!feof(pfichero)) { strcpy( r[i].nombre, reg.nombre); r[i].precio= reg.precio; fread(&reg, 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); }

Você também pode gostar