Está en la página 1de 28

ENTRADA Y SALIDA POR ARCHIVOS

Sugerencias y herramientas para crear para crear y presentar diapositivas en formato panormico

Contenido

Flujos Puntero FILE Apertura de un archivo Creacin de archivo secuencial Archivos binarios en C F i Funciones para acceso aleatorio l i Argumentos de main () Ejercicios

Introduccin

Hasta el momento se han realizado las operaciones p bsicas de entrada y salida. La lectura de datos se realiza desde un teclado, y la escritura de datos se realiza en el monitor y en la impresora de su sistema En C existe la biblioteca stdio.h estandarizada por ANSI; esta biblioteca proporciona tipos de datos, macros y funciones para acceder a los archivos. El manejo de archivos en C se hace mediante el concepto de flujo (streams) o canal, o tambin denominado secuencia

Flujo

Un flujo j ( (stream) ) es una abstraccin q que se refiere a un flujo o corriente de datos que fluyen entre un origen y un destino. Entre el origen y el destino debe existir una conexin o canal por la que circulen los datos. La apertura de un archivo supone establecer la conexin del programa con el dispositivo que contiene al archivo, archivo por el canal que comunica el archivo con el programa van a fluir las secuencias de datos

Puntero FILE

En el programa el archivo tiene un nombre interno que es un puntero a una estructura predefinida (puntero a archivo). Esta estructura contiene informacin sobre el archivo tal como la direccin del buffer que utiliza, archivo, utiliza el modo de apertura del archivo, el ultimo carcter ledo del buffer y otros detalles que generalmente el usuario no necesita i saber. b El identificador id ifi d del d l tipo i d las de l estructuras es FILE y esta declarada en el archivo de cabecera stdio.h; ;

Apertura de un archivo

Para procesar un archivo en C la primera operacin que hay que realizar es abrir el archivo. El programa accede a los archivos a travs de un puntero a la estructura FILE, la funcin de apertura p devuelve dicho p puntero. La funcin para abrir un archivo es fopen() y el formato de llamada es:

Fopen(nombre_archivo, Fopen(nombre archivo modo); Nombre = cadena Contiene el identificador externo del archivo Modo = cadena Contiene el modo en que se va a tratar el archivo

Ejemplo 13.3 13 3

Se desea abrir un archivo de nombre LICENCIA.EST para obtener ciertos datos #i l d <stdio.h> #include < di h> #include <stdlib.h> FILE *pf; Ch nm[]=C:\LICENCIA.EST; Char [] C \LICENCIA EST Pf=fopen(nm, r); If (pf==NULL) { Puts(Error al abrir el archivo.); Exit (1); }

Modos de apertura de un archivo


Al abrir el archivo fopen() se espera como segundo argumento el modo de tratar el archivo. Fundamentalmente se establece si el archivo es de lectura, escritura o aadido; y si es de texto o binario

Cont Cont

En estos modos no se ha establecido el tipo p de archivo, , de texto o binario. Se utiliza la letra t para modo de texto, la b para modo binario como ultimo carcter de la cadena modo. Por consiguiente los modos de abrir un archivo de texto:

rt, wt, at, r+t, w+t, a+t Y los modos de abrir un archivo binario: rb , wb wb , ab ab , r+b r+b , w+b w+b , a+b a+b rb

Ejemplo 13.5 13 5

Se dispone p de un archivo de texto, se requiere leerlo para realizar un cierto proceso y escribir datos resultantes en el archivo binario

#include <stdio.h> #include <stdlib.h> main () { FILE *pf1 , *pf2 ; char org[]="C:\LICENCIA.EST"; char dst[]="C:\RESUMEN.REC" ; pf1 = fopen(org, "rt"); pf2 = fopen(dst,"wb"); if (pf1 == NULL || pf2 == NULL) puts ( "Error al abrir los archivos. "); system("pause"); (" ") exit (1) ; }

NULL y EOF

Las funciones de biblioteca q que devuelven un p puntero (strcpy(), fopen()) especifican que si no pueden realizar la operacin devuelven NULL Las funciones de librera de E/S de archivos, generalmente empiezan por f de file, tienen especificado ifi d que son de d tipo i entero de d tal l forma f que si i la operacin falla devuelven EOF, tambin devuelven EOF para indicar que se ha ledo el fin de archivo

Cierre de archivos

Los archivos en C trabajan con una memoria intermedia, son con buffer. La entrada y salida de datos se almacena en este buffer, volcndose cuando esta lleno. Siempre que se termina de p procesar un archivo y siempre p q que se termine la ejecucin del programa los archivos abiertos hay que cerrarlos para que entre otras acciones se vuelque el buffer. La funcin fclose(puntero_file) fclose(puntero file) cierra el archivo asociado al puntero_file. int fclose(FILE* ( pf); p );

Ejemplo 13.7 13 7

Abrir dos archivos de texto, despus se cierra cada uno de ellos #include <stdio.h> FILE *pf1, *pf2 ; pf1 = fopen(C:\DATOS.DAT", a+"); pf2 = fopen("C:\TEMPS.RET",a+"); fclose(pf1); fclose(pf2);

Creacin de un archivo secuencial


Una vez abierto un archivo p para escribir datos hay yq que grabar los datos en el archivo. Las funciones de entrada y de salida de archivos tienen mucho parecido con las funciones f utilizadas para entrada y salida para los flujos stdin (teclado) y stdout (pantalla). Todas tienen una versin para archivos que empiezan por la letra f, f as se tiene fprint(), fscanf(), fputs(), fgets(); la mayora p empiezan p por f p de funciones especificas

Funciones putc() y fptuc()


Escriben un carcter en el archivo asociado al puntero a FILE. El formato de llamada: putc(c, puntero_archivo); f fputc(c, ( puntero_archivo); hi ) Siendo c el carcter a escribir Ej Ejemplo l 13 13.1 1 Se desea crear un archivo salida.pta con los caracteres introducidos por el teclado

Funciones getc() y fgetc()


Estas funciones leen un carcter del archivo asociado al puntero a FILE Devuelven FILE. D l el l carcter ledo l d o EOF si i es fin fi de d archivo hi (o ( si i ha h habido un error). El formato de llamada es: getc (puntero_archivo); fgetc (puntero archivo); Ejemplo 13.2 El archivo hi salida.pta lid t creado d en el l problema bl anterior t i se d desea l leer para mostrarlo por pantalla y contar las lneas que tiene

Funciones fputs() y fguets()


Estas funciones escriben/leen una cadena de caracteres en el archivo asociado. La funcin fputs() escribe una cadena de caracteres; ; el formato de llamada es:

fputs(cadena, puntero_archivo);

La funcin fguets() lee una cadena de caracteres de un archivo. El formato de llamada es:

fguets (cadena, (cadena n n, puntero_archivo); puntero archivo);

Ejercicio 13.1.1 13 1 1

El archivo cartas.dat contiene un texto al que se desea aadir nuevas lneas, de longitud mnima 30 caracteres desde un archivo primero.dat caracteres, primero dat

Funciones fprintf() y fscanf(), fscanf() ejm13 ejm13.4.1 41


Las funciones printf() y scanf() permiten escribir o leer variables cualquier tipo de dato estndar, los cdigos de formato (%d, (%d %f) %f ) indican a C la transformacin que debe realizar con la secuencia de caracteres. caracteres La misma funcionalidad tiene fprintf() y fscanf() con los flujos (archivos asociados) a que se aplican

Funcin feof()

Diversas funciones de lectura de caracteres devuelven EOF cuando leen el carcter de fin de archivo. La funcin feof() realiza el cometido anterior, devuelve un valor distinto de 0 (true) cuando se lee el carcter de fin de archivo, en caso contrario devuelve 0 (false)
While(!feof(pf)) Whil (!f f( f)) {. }

Funcin rewind()

Una vez que se alcanza el fin de un archivo, nuevas llamadas a feof() siguen devolviendo un valor distinto de cero. cero Con la funcin rewind() se sita el puntero del archivo al inicio de este. El formato de llamada es:
Rewind(puntero_archivo)

Ej Ejemplo l 13 13.10 10

Archivos binarios en C

Para abrir un archivo en modo binario hay que especificar la opcin b en el modo. Los archivos binarios son secuencias de 0,s 0 s y 1,s. 1 s los modos para abrir un archivo binario son los mismos que para abrir un archivo de texto, texto sustituyendo t por b; rb, wb, ab, r+b, w+b, a+b

Funcin de salida fwrite()


La funcin fwrite() escribe un buffer de cualquier tipo de dato en un archivo binario. El formato de llamada es: fwrite(direccion_buffer, tamao, num_elementos, puntero_archivo); t hi ) Ejemplo 13.12

Funcin de lectura fread()


Esta funcin lee un archivo n bloques q de bytes y y los almacena en un buffer. El numero de bytes de cada bloque (tamao) se pasa como parmetro, al igual que el numero n de bloques y la direccin del buffer ff (o variable) donde se almacena. El formato de llamada es: Fread (direccion_buffer, tamano,n,puntero_archivo); Ej Ejemplo l 13 13.13 13

Funciones para acceso aleatorio


Las funciones fseek() y ftell() se usan principalmente para acceso directo a archivos en C. estas consideran el archivo como una secuencia de bytes; el numero de byte es el ndice del archivo. Segn g se va leyendo y o escribiendo registros g o datos en el archivo, el programa mantiene a travs de un puntero la posicin actual. Con la llamada a la funcin ftell() se obtiene el valor de dicha posicin El formato para llamar a fseek ( ) es: fseek(puntero_archivo, (p , desplazdmiento, p , origen); g );

Funcin ftell

La p posicin actual del archivo se p puede obtener llamando a la funcin ftell() y pasando un puntero al archivo como argumento. La funcin devuelve la posicin como numero de bytes (en entero largo: long int) desde el inicio del archivo (byte 0) P Para ll llamar a la l funcin f i se pasa como argumento el l puntero a FIL,E. l long i t ftell(FILE int ft ll(FILE *pf); * f)

Ejercicios

Escriba un programa para abrir un archivo de caracteres cuyo nombre y acceso se introducen por teclado en modo lectura; en el caso de que el resultado de la operacin sea errneo, errneo abrir el archivo en modo escritura Escribir un p programa g que compare q p dos archivos de texto. El programa ha de mostrar las diferencias entre el primer archivo y el segundo, precedidas del numero de lnea y de columna

Patrn de prueba de pantalla panormica (16:9)

Prueba de la relacin de aspecto


(Debe parecer circular)

4x3 16x9

También podría gustarte