You are on page 1of 27

Agenda

Archivos en C
Fernando Mancilla
Programacin o Casa Central, UTFSM

Nov 2007

Fernando Mancilla

Archivos en C

Agenda

Agenda

Introduccin o Denicin o

Operando con Archivos Abrir Archivo Usando Archivos Cerrar Archivo

Fernando Mancilla

Archivos en C

Agenda

Agenda

Introduccin o Denicin o

Operando con Archivos Abrir Archivo Usando Archivos Cerrar Archivo

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Denicin o

Denicin o

Un archivo sirve para almacenar informacin de modo o permanente. Puede ser abierto por un programa, ser modicado, y luego ser almacenado con estos cambios. Existe un conjunto de funciones de biblioteca para manejar y procesar archivos. Estas se encuentran en stdio.h Archivos secuenciales:
Archivos con caracteres consecutivos (tipo texto). Archivo organizado en bloques contiguos (tipo binario, array / struct).

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Abrir, Leer o Escribir, Cerrar

Al manipular los se deben seguir los siguientes pasos:


1 2 3

Abrir Archivo. Leer o Escribir Archivo. Cerrar Archivo.

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Abrir Archivo

Para declarar un archivo se utiliza la estructura FILE, el archivo es un puntero a esta estructura: FILE *nombre_logico_archivo; Nota: Un archivo debe poseer un nombre lgico donde luego o ser referenciado a su nombre f a sico.

Para abrir un archivo se utiliza la funcin fopen(), la cual o retorna un puntero tipo FILE. Su prototipo es: FILE *fopen("nombre_fisico","modo_apertura") Nota: Una vez abierto el archivo, un puntero se posiciona en el primer dato.

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Nombre F sico a Nombre Lgico o

Para referenciar entonces el nombre lgico del archivo a su nombre o f sico, el retorno de la funcin fopen() se asigna al nombre lgico o o del archivo: Ejemplo: FILE *mi_archivo; mi_archivo = fopen("archivo.txt","modo_apertura"); El modo apertura indica para qu se abre el archivo: si escritura, e lectura, etc. Esto se dene en la siguiente diapositiva.

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Modo de Apertura de un Archivo tipo Texto

Modo r w a r+ w+ a+

Signicado Abrir un archivo texto para lectura Crear un archivo texto para escritura Abrir o Crear un archivo texto para agregar al nal Abrir un archivo texto para lectura/escritura Crear un archivo texto para lectura/escritura Abrir o Crear un archivo texto para lectura/escritura

Nota: Crear signica que si existe el archivo lo borra y crea uno nuevo.

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Modo de Apertura de un Archivo tipo Binario

Modo rb wb ab r+b w+b a+b

Signicado Abrir un archivo binario para lectura Crear un archivo binario para escritura Abrir o Crear un archivo binario para agregar al nal Abrir un archivo binario para lectura/escritura Crear un archivo binario para lectura/escritura Abrir o Crear un archivo binario para lectura/escritura

Nota: Crear signica que si existe el archivo lo borra y crea uno nuevo.

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Error de apertura
La funcin fopen retorna NULL si hubo error al abrir el archivo: o Ejemplo: FILE *mi_archivo; mi_archivo = fopen("archivo.txt","r"); if (archivo == NULL) printf("Archivo no existe\n"); /*o tambien*/ if ((mi_archivo = fopen("archivo.txt","r")) == NULL) printf("Archivo no existe\n");

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Fin de Archivo

Para detectar n de archivo se utiliza la funcin feof(). o 1: es n de archivo, 0: No es n de archivo.

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Funciones para lectura y escritura de archivos

Funciones para trabajar con archivos: 1 Texto con formato:


fscanf() lectura. fprintf() escribir.
2

Por l neas o caracteres:


fgets() lectura. fputs() escribir.

Por bloques (arreglos, estructuras):


fread() lectura. fwrite() escribir.

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

1.1 Leer Texto con formato: fscanf()

fscanf() lectura de texto con formato. Prototipo: int fscanf( archivo , "formato" , &var1, &var2, ...); Ejemplo 1: fscanf(mi_archivo,"%d",&x);

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

1.1 Leer Texto con formato: fscanf()


Ejemplo 2: Leer desde un archivo y mostrar por pantalla. 23 21 19 20 21 15 Se lee archivo temperaturas.txt = ...
int main() { FILE *temperatura; int t; if ((temperatura = fopen("temperatura.txt","r")) == NULL) printf("No se pudo abrir el archivo"); else { while(!feof(temperatura)) { fscanf(temperatura,"%d",&t) printf("%d\n",t); } } return 0; }
Fernando Mancilla Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

1.2 Escribir Texto con formato: fprintf()

fprintf() escritura de texto con formato. Prototipo: int fprintf( archivo , "formato" , var1, var2, ...); Ejemplo 1: fprintf(mi_archivo,"%d",x);

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

1.2 Escribir Texto con formato: fprintf()


Ejemplo 2: Escribir en un archivo. Se crear un archivo autos.txt con marca, modelo y precio: a
int main() { FILE *autos; char marca[20],modelo[20],float precio; if ((autos = fopen("autos.txt","w")) == NULL) printf("No se pudo abrir el archivo"); else { do{ printf("Ingrese marca, modelo, precio:\n"); scanf("%s %s %f",&marca,&modelo,&precio); fprintf(autos,"%s %s %f",marca,modelo,precio); }while( /*Se desee ingresar mas autos*/ ); } fclose(autos); return 0;
Fernando Mancilla Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

2.1 Leer por cadenas de caracteres: fgets()

fgets() lectura de cadena de caracteres. Prototipo: char *fgets( var_cadena , n_caracteres , archivo); Slo lee n-1 caracteres. o Ejemplo: char linea[10]; fgets(linea,10,mi_archivo); //leera 9 caracteres de mi_archivo

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

2.2 Escribir por cadenas de caracteres: fputs()

fputs() escritura de cadenas de caracteres. Prototipo: int fputs( var_cadena, archivo); Ejemplo: char linea[10]; fputs(linea,mi_archivo); //escribira linea en mi_archivo

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

2.3 Leer de un caracter: getc()

getc() lectura de un caracter. Prototipo: int getc(archivo); Ejemplo: int c; c = getc(mi_archivo);

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

2.4 Escribir un caracter: putc()

putc() escritura de cadenas de caracteres. Prototipo: int putc( var_caracter, archivo); Ejemplo: char caracter; ... putc(caracter,mi_archivo);

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

3.1 Leer por bloques (para arreglos y structs): fread()


fread() leer por bloques. Prototipo:
fread(bloque_a_leer,tamano_del_registro,num_registros,archivo); Ejemplo 1: struct automovil{ char marca[20], modelo[20]; float precio; } auto1; ... fread(&auto1, sizeof(auto1),1,mi_archivo);

Se puede apreciar que para obtener el tamao del registro se ha n utilizado la funcin sizeof(). o
Fernando Mancilla Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

3.1 Leer por bloques (para arreglos y structs): fread()

Ejemplo 2: struct barco{ int codigo, tipo, peso; } bin; ... while(!feof(mi_archivo)) { fread(&bin, sizeof(bin),1,mi_archivo); printf("%d %d %d\n",bin.codigo,bin.tipo,bin.peso); }

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

3.2 Escribir por bloques (para arreglos y structs): fwrite()


fwrite() escribir por bloques. Prototipo:
fwrite(bloq_a_escribir,tamano_del_reg,num_regs,archivo);

Ejemplo 1: struct automovil{ char marca[20], modelo[20]; float precio; } auto1; ... fwrite(&auto1, sizeof(auto1),1,mi_archivo);

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

3.2 Escribir por bloques (para arreglos y structs): fwrite()


Ejemplo 2: struct barco{ int codigo, tipo, peso; } bin; ... while( /*Se desee agregar mas barcos*/) { printf("Ingrese codigo, tipo y peso del container:\n"); scanf("%d %d %d",&bin.codigo,&bin.tipo,&bin.peso); fwrite(&bin, sizeof(bin),1,mi_archivo); }

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Otras funciones

rewind(archivo): sita el cursor al principio del archivo. u fseek( archivo, desplazamiento, origen): sita el cursor para u leer o escribir en algn lugar deseado. u
desplazamiento: avanzar un nmero de bytes desde el origen. u origen: desde donde se ubica el cursor.
Se coloca 0 para indicar desde comienzo del archivo. Se coloca 1 para indicar desde posicin actual. o Se coloca 2 para indicar desde comienzo del archivo.

Se puede utilizar fseek para ambos tipos de archivos, pero es ms recomendable para archivos binarios. a ftell(archivo): Devuelve la posicin actual del cursor. o

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Cerrar Archivo

Cerrar arhivo: Se utiliza fclose(). fclose(archivo);

Fernando Mancilla

Archivos en C

Introduccin o Operando con Archivos

Abrir Archivo Usando Archivos Cerrar Archivo

Nuestra mayor gloria no est en no haber ca nunca, a do sino en levantarnos cada vez que caemos.
.:Oliver Goldsmith:.

Fernando Mancilla

Archivos en C

You might also like