Sie sind auf Seite 1von 7

FICHEROS EN C

Hasta hoy solo hemos realizados programas que almacenan datos de manera temporal mientras el programa
esta en ejecucin. Ahora abordaremos funciones que nos permitirn almacenar datos desde teclado a un
fichero que guardaremos en cualquier unidad de almacenamiento (Disco Duro, Disquete, emory !lash,etc."
Estructura de un programa que utiliza ficheros:
#include$stdio.h%
main("
&
!'() *pf+ ,*D)-(A.A-'/0 D) 10A 2A.'A3() 4105)./ A 10A )65.1-51.A D) 5'4/ !'()*,
if( (pf 7 fopen(80/3.)9!'-H)./8,8/D/9A4).51.A8""7701((" ,*A3.'. !'-H)./ : 2A('DA.*,
&
perror(8)l fichero no se puede abrir8"+
e;it(<"+
=
,*/4).A-'/0)6 )0 )( !'-H)./*,
fclose(pf"+ ,*-)..A. !'-H)./*,
=
4ara entender esto podemos desarrollar los programas y luego e;plicar las funciones que contienen.
,*4rograma <> fputc.c )ste programa introduce una cadena de caracteres carcter a carcter a un fichero. 0o
produce ninguna impresin a pantalla*,
#include$stdio.h%
#include$string.h%
main("
&
!'() *pf+
char buffer?@<A+
int i7B+
if( (pf 7 fopen(8te;to.t;t8,8C8""7701(("
&
perror(8)l fichero no se puede abrir8"+
e;it(<"+
=
strcpy(buffer,8)ste es un te;to para fputcDEn8"+
Chile(Dferror(pf" FF buffer?iA"
fputc(buffer?iGGA,pf"+
if(ferror(pf""
perror(8)rror durante la escritura8"+
fclose(pf"+
=
Eplicaci!n del programa anterior:
"include#string.h$ > 'ncluimos el fichero que contiene la funcin (strcp%" para manipular cadenas de
caracteres.
FI&E 'pf( > declaramos una Hariable puntero pf de tipo FI&E
if) )pf * fopen)+teto.tt+,+-+..**N/&&.
0
perror)+El fichero no se puede a1rir+.(
eit)2.(
3
)n las lIneas anteriores aperturamos,creamos el fichero teto.tt con la funcin fopen en modo escritura (->
Crite" y comprobamos que si la apertura no se da entonces imprimimos un rotulo de error con la funcin
perror.
strcp%)1uffer,+Este es un teto para fputc45n+.( > en esta lInea copiamos la cadena> Este es un teto para
fputc4 a la Hariable tipo char buffer.
-hile)4ferror)pf. 66 1uffer7i8.
fputc)1uffer7i998,pf.(
)n las dos lIneas anteriores utilizamos un ciclo -hile para introducir carcter a carcter la cadena que tiene
buffer al fichero apuntado por pf a traHJs de la funcin fputc, mientras no se encuentre error en el fichero 4
ferror)pf. y mientras haya datos en el buffer 1uffer7i8.
if)ferror)pf..
perror)+Error durante la escritura+.(
)n las dos lIneas anteriores preguntamos que si hay error ferror)pf. en el archiHo referenciado por pf
entonces imprimimos un rotulo de error asistidos por la funcin de error perror.
fclose)pf.( > cerramos el fichero luego de trabajar en el.
0ota> cuando ejecute el programa no aparecer nada en pantalla. Debe Herificar si el archiHo te;to.t;t esta
creado y si contiene la cadena de caracteres Este es un teto para fputc4. 6i es asI entonces tuHo J;ito.
Funciones utilizadas
!open> abre un fichero
4error> escribe un mensaje de error
);it> sale del programa
6trcpy> copia una cadena de un origen a un destino
!error> comprueba error en el fichero
!putc> imprime en un fichero
!close> cierra un fichero
De esta manera la cadena de caracteres permanecer aun cuando terminemos de ejecutar el programa y
apaguemos el 4-. 4ero si deseamos imprimir esta cadena de caracteres en un futuro en la pantalla
necesitamos otra funcin contraria a fputc. 2eamos el siguiente programa.
,*4rograma K> fgetc.c )ste programa e;trae una cadena de caracteres carcter a carcter contenida en el
fichero teto.tt creado en el programa anterior para luego imprimirla en pantalla.*,
#include$stdio.h%
#include$string.h%
main("
&
!'() *pf+
char buffer?@<A+
int i7B+
if( (pf 7 fopen(8te;to.t;t8,8r8""7701(("
&
perror(8)l fichero no se puede abrir8"+
e;it(<"+
=
Chile(Dferror(pf" FF Dfeof(pf""
buffer?iGGA7fgetc(pf"+
buffer?LLiA7MEBM+
if(ferror(pf""
perror(8)rror durante la lectura8"+
fclose(pf"+
printf(8(a cadena leida es> Ns8,buffer"+
=
Eplicaci!n del programa anterior
-hile)4ferror)pf. 66 4feof)pf..
1uffer7i998*fgetc)pf.(
1uffer7::i8*;5<;(
(as lIneas de cdigos anteriores le dice al 4- que mientras no hayan errores en el fichero y no se llegue al
final del fichero, entonces pase la cadena de te;to carcter a carcter contenida en te;to.t;t a la Hariable
buffer de tipo char y despuJs ponga un fin de lInea> 5<.
Funciones utilizadas
!open> abre un fichero
4error> escribe un mensaje de error
);it> sale del programa
6trcpy> copia una cadena de un origen a un destino
!error> comprueba error en el fichero
!eof> -omprueba si se llego al final del fichero.
!getc> e;trae un carcter desde un fichero
!close> cierra un fichero
,*4rograma O> fputs.c )ste programa imprime una cadena de caracteres capturada desde teclado a un fichero.
)l nombre del fichero se lo da el usuario. : posteriormente e;trae la cadena desde el fichero para imprimirlo
en pantalla.*,
#include$stdio.h%
#define 0 @<
main("
&
!'() *pf+
char buffer?0A,fichero?<OA+
system(8cls8"+
printf(80ombre del !ichero> 8"+
gets(fichero"+
fichero?<KA7MEBM+
if((pf7fopen(fichero,8CGb8""7701(("
&
printf(8)l fichero Ns no se puede abrir8,fichero"+
e;it(B"+
=
printf(8En!ichero Ns abiertoEn8,fichero"+
printf(8Digite un te;to, !inalice cada linea con )nterEn8"+
printf(8!inalice el te;to con !PEn8"+
Chile(gets(buffer"D701(("
&
fputs(buffer,pf"+
if(ferror(pf""
&
perror(8)scribio demasiado te;to8"+
e;it(<"+
=
fputc(MEnM,pf"+
=
reCind(pf"+
system(8cls8"+
printf(8(a cadena escrita es>EnEn8"+
Chile(fgets(buffer,0,pf"D701(("
printf(8Ns8,buffer"+
if(ferror(pf""
perror(8)rror durante la escritura8"+
fclose(pf"+
=
Funciones utilizadas
!puts> imprime una cadena de caracteres a un fichero
.eCind> HuelHe el apuntador al inicio del fichero
!gets> e;trae una cadena de caracteres desde un fichero.
,*4rograma Q> put-.c )ste programa imprime digito a digito una cadena de nRmeros capturada desde teclado
a un fichero 2alores.t;t. : posteriormente e;trae la cadena desde el fichero para imprimirlo en pantalla digito
a digito.*,
#include$stdio.h%
#define 0 S
!'() *pf+
main("
&
int lista?0A+
int i+
pf7fopen(8Halores.t;t8,8CG8"+
for(i7B+i$0+iGG"
&
printf(8EnDato?NdA7 8,iG<"+
scanf(8Nd8,Flista?iA"+
putC(lista?iA,pf"+
if(ferror(pf""
&
perror(8)rror durante la escritura8"+
e;it(<"+
=
=
reCind(pf"+
printf(8EnEn(os Halores e;traidos del fichero E82alores.t;tE8 son>En8"+
Chile(<"
&
i7getC(pf"+
if(feof(pf" TT ferror(pf""
breaU+
printf(8Nd 8,i"+
=
if(ferror(pf""
perror(8)rror durante la escritura8"+
fclose(pf"+
=
Funciones utilizadas
putC> imprime una cadena de nRmeros a un fichero digito a digito.
getC> e;trae una cadena de nRmeros desde un fichero digito a digito.
,*4rograma S> fprintf.c )ste programa imprime registro a registro datos capturados desde teclado a un
fichero registro.t;t. : posteriormente e;trae cada registro desde el fichero para imprimirlo en pantalla.*,
#include$stdio.h%
main("
&
!'() *pf+
char nombre?SA?<BA+
int ep<,epK,epO,asist,nf?SA+
int i+
pf7fopen(8.egistro.t;t8,8CG8"+
if(Dpf"
&
perror(8)n el fichero no puede escribirse8"+
e;it(B"+
=
else
&
for(i7B+i$K+iGG"
&
fflush(stdin"+
printf(8En)studiante Nd> 8,iG<"+gets(nombre?iA"+
fflush(stdin"+
printf(8En);amen 4arcial <> 8"+scanf(8Nd8,Fep<"+
printf(8En);amen 4arcial K> 8"+scanf(8Nd8,FepK"+
printf(8En);amen 4arcial O> 8"+scanf(8Nd8,FepO"+
printf(8EnAsistencia> 8"+scanf(8Nd8,Fasist"+
nf?iA7ep<GepKGepOGasist+
fprintf(pf,8Ns NdEn8,nombre?iA,nf?iA"+
=
reCind(pf"+
printf(8En(os datos son>En8"+
for(i7B+i$K+iGG"
&
fscanf(pf,8Ns Nd8,nombre?iA,Fnf?iA"+
printf(8)studiante> NsEtEt0ota !inal> NdEn8,nombre?iA,nf?iA"+
=
=
fclose(pf"+
=
Funciones utilizadas
fprintf> imprime un registro de datos a un fichero.
fscanf> e;trae un registro desde un fichero.
,*4rograma P> f-rite.c )ste programa imprime registro a registro datos capturados desde teclado a un fichero
registro.t;t. : posteriormente e;trae cada registro desde el fichero para imprimirlo en pantalla.*,
#include$stdio.h%
#include$stdlib.h%
typedef struct r registro+
struct r
&
char referencia?OBA+
long precio+
=+
main("
&
registro reg+
int bytesreg7sizeof(reg"+
!'() *pf+
char sprecio?<BA,respuesta+
pf7fopen(8Datos.dat8,8Cb8"+
system(8cls8"+
printf(8plse !P para finalizarEnEn8"+
printf(8.eferencia> 8"+
Chile(gets(reg.referencia"D701(("
&
printf(84recio> 8"+
gets(sprecio"+reg.precio7atol(sprecio"+
fCrite(Freg,bytesreg,<,pf"+
printf(8En.eferencia> 8"+
=
fclose(pf"+
clearerr(stdin"+
do
&
printf(8VDesea Hisualizar el ficheroW(s,n" 8"+
respuesta7toloCer(getchar(""+
fflush(stdin"+
=Chile((respuestaD7MsM" FF (respuestaD7MnM""+
if(respuesta77MsM"
&
system(8cls8"+
pf7fopen(8Datos.dat8,8rb8"+
fread(Freg,bytesreg,<,pf"+
Chile(Dfeof(pf""
&
printf(8.eferencia> NsEn8,reg.referencia"+
printf(84recio> NldEn8,reg.precio"+
fread(Freg,bytesreg,<,pf"+
=
=
fclose(pf"+
=
Funciones utilizadas>
!Crite> imprime un registro de
datos a un fichero
!read> e;trae un registro desde
un fichero

Das könnte Ihnen auch gefallen