10. Archivos
Mtra. Irma Ardón
Definición de Archivo
Estructura de dato que contiene una secuencia de bytes que termina con
EOF
Lo que da sentido a dicha secuencia
de bytes, son las estructuras de datos
que construimos para trabajar con ellos
Representación gráfica:
EOF
Apuntador a datos
Inicio del
archivo Indicador de
posición Fin del
archivo Secuencia ó flujo de bytes
Representación Gráfica
Tipos de Archivos
•
De Texto
•
Binario
Componentes de los Archivos de Texto
Cadena de caracteres alfanuméricos y símbolos especiales
Si se almacenan números, hay que darles formato, signo, longitud y precisión
Se leen por: caracter, línea o token
Componentes de los Archivos Binarios
Los datos se escriben con el mismo formato en que se encuentran en memoria primaria
Se debe elegir el tipo de dato que
corresponda al rango de valores a manipular
Pueden contener instrucciones ejecutables
Funciones Básicas de Archivos
stdio.h
Se clasifican en tres categorías:
Creación - Apertura
Lectura - Escritura
Cierre
FILE * fopen (“ruta y nombre del archivo”,”modo”);
donde MODO:
r lectura
wescritura (destruye) a escritura (agrega)
Si a éstos modos de apertura se añaden:
b el archivo es o será binario + lectura y escritura
Creación (o Apertura)
Cierre
fclose(ApuntadorADatos);
Lectura - Escritura…
fprintf(ApuntadorADatos,”%EspecificadorDeFormato”,Origen);
fscanf(ApuntadorADatos,”% EspecificadorDeFormato”,&Destino);
fputs(CadenaOrigen,LongitudCadenaOrigen,ApuntadorADatos);
fgets(CadenaDestino,LongitudCadenaDestino,ApuntadorADatos);
putc(CaracterOrigen,ApuntadorADatos);
…Lectura - Escritura
getc(ApuntadorADatos);
int
fwrite(Origen,NumBytes,ElementosDeNumBytes,ApuntadorA Datos);
int
fread(&Destino,NumBytes,ElementosDeNumBytes,Apuntador ADatos);
int
fseek(ApuntadorADatos,DesplazamientoEnBytes,PuntoDePar tida);
rewind(ApuntadorADatos):
Números en archivo de texto en C
(ArregloArchivo.cpp)
#include<iostream>
#include<stdlib.h>
#include<time.h>
#define MAX 15
using namespace std;
int main (){
int i,num, b[MAX];
FILE *archivo;
srand(time(NULL));
archivo = fopen
("C:ARREGLO.TXT", "w");
for(i=0;i<MAX;i++) { num =rand()%100;
fprintf(archivo,"%d\n",num);
}
fclose(archivo);
cout<<"\n\n";
archivo =fopen
("C:ARREGLO.TXT", "r");
for(i=0;i<MAX && ! feof(archivo);i++){
fscanf(archivo,"%d",&b[i]);
cout<<b[i]<<"\t";
} }
//Escribir en bloc de notas varias líneas de texto “LINEAS.TXT”
#include <stdio.h> #include <iostream> #define TAM 45 using namespace std;
int main() { char cad[TAM];
FILE * archivoPtr;
archivoPtr = fopen("E://LINEAS.TXT","r");
if (archivoPtr == NULL) cout<<"\n IMPOSIBLE LEER ARCHIVO";
else {
fgets(cad,TAM,archivoPtr);
while (!feof(archivoPtr)){
cout<<"\n"<<cad;
fgets(cad,TAM,archivoPtr);
}
fclose(archivoPtr);
}
Líneas en Archivo de Texto en C
#include<iostream>
#include<string.h>
#include<stdio.h>
#define TAM 10
using namespace std;
struct TArt{
int id; char descripcion[TAM]; float precio;
};
int main(){
TArt arreglo[TAM];
IngresarDatos(arreglo);
GrabarArchivo(arreglo);
LeerArchivo();
}
Arreglo de Registros en Archivo Binario de C…
void IngresarDatos(TArt arreglo[ ]){
int i;
cout<<"\nValores Ingresados";
for (i=0;i<TAM;i++) arreglo[i].id = -1;
arreglo[0].id=1;
strcpy(arreglo[0].descripcion,"UNO");
arreglo[0].precio=1.1;
arreglo[1].id=2;
strcpy(arreglo[1].descripcion,"DOS");
arreglo[1].precio=2.2;
}
void GrabarArchivo(TArt arreglo[ ]){
FILE * pf;
int i=0;
if ( (pf = fopen("C:DATOS.DAT", "wb")) == NULL)
cout<<"imposible escribir en el archivo.\n";
else {
while (arreglo[i].id!= -1) {
fwrite(&arreglo[i],sizeof(TArt),1,pf);
i++;
}
cout<<"\nGUARDADO EN MEDIO EXTERNO";
fclose(pf);
} }
int LeerArchivo(){
TArt L[TAM];
FILE * pf1;
int i=0;
if ( (pf1 = fopen("C:DATOS.DAT", "rb")) == NULL) cout<<"imposible escribir en el archivo.\n";
else {
cout<<endl<<"LEIDO DE ARCHIVO: "<<endl;
fread(&L[i],sizeof(TArt),1,pf1);
while (!feof(pf1)) { cout<<L[i].id<<" ";
cout<<L[i].descripcion<<" ";
cout<<L[i].precio<<endl;
i++;
fread(&L[i],sizeof(TArt),1,pf1);
}
fclose(pf1); } return i; }