Folleto Ficheros Unidad 5
Folleto Ficheros Unidad 5
Folleto Ficheros Unidad 5
UNIDAD
5
OPERACIONES CON FICHEROS
5.1
Introduccin:
Pgina 1
LENGUAJES DE PROGRAMACION
principio y sin haber ledo toda la informacin, hasta el punto donde se
encontrase la informacin que se buscaba.
Leer o escribir datos comenzando siempre desde el principio del archivo.
Aadir datos a partir del final del archivo.
Poco eficiente.
2. Acceso aleatorio: Los archivos de acceso aleatorio son ms verstiles
(adaptable), permiten acceder a cualquier parte del fichero en cualquier
momento, como si fueran arrays en memoria. Las operaciones de lectura y/o
escritura pueden hacerse en cualquier punto del archivo. En este caso organiza
los datos en bloques de bytes contiguos de informacin, que representan
estructuras de datos, arreglos y estructuras).
Acceder directamente a cualquier posicin dada de un archivo para
actualizar los valores contenidos a partir de dicho punto.
Implica la utilizacin de operaciones nuevas que permitan situarse en
cualquier punto del archivo.
Un fichero es una cadena de bytes consecutivos que termina en un carcter especial llamado EOF
(End Of File).
5.2
Se puede conseguir la entrada y la salida de datos a un archivo a travs del uso de la biblioteca de
Funciones; C no tiene palabras claves que realicen las operaciones de E/S. La siguiente tabla da
un breve resumen de las funciones que se pueden utilizar. Se debe incluir la librera STDIO.H.
Pgina 2
LENGUAJES DE PROGRAMACION
informacin se almacene temporalmente mientras se transfiere entre la memoria de la
computadora y el archivo de datos.
Esta rea de buffer se establece de la siguiente manera:
FILE *vp ;
En donde FILE es un tipo especial de estructura que establece el rea de buffer y vp es la variable
puntero que indica el principio de esa rea.
El tipo de estructura FILE se define en el archivo #include<stdio.h> .
Acceso
Descripcin
Pgina 3
LENGUAJES DE PROGRAMACION
r+
w+
a+
Pgina 4
LENGUAJES DE PROGRAMACION
Ejemplo 2: El siguiente ejemplo trata de abrir para lectura y escritura un archivo de datos
previamente existente llamado muestra.txt. Si el archivo no se encuentra se generar un mensaje
de error de lo contrario se abrir el archivo y se procesara como se indica:
#include<stdio.h>
#define NULL 0
void main (void)
{
FILE *fpt;
fpt = fopen(muestra.txt, r+);
if (fpt == NULL)
printf(\n ERROR- No se puede abrir el archivo indicado\n);
else {
...
fclose(fpt);
}
}
5.3
Manipulacin de archivos:
fgetc(pf): lee un carcter desde el archivo apuntado por pf de la posicin indicada por el
puntero de lectura y escritura devuelve el carcter leido o un EOF (End Of File) si ocurre
un error o detecta el final del archivo.
fputc(carac, pf): escribe el carcter en el archivo apuntado por pf, en la posicin indicada
por el puntero de lectura y escritura.
2do. Los datos pueden ser escritos y ledos como cadenas de caracteres (con espacio en blanco)
o palabra a palabra:
fgets(cadena1, n, pf);
fputs(cadena1, pf);
fgets(cadena1, n, pf): lee una cadena de caracteres desde el archivo apuntado por pf y la
almacena en cadena1, la terminacin \0 es aadida automticamente a la cadena leida,
si el valor devuelto es NULL significa que ha ocurrido un error o que se detecto el final del
archivo.
Pgina 5
LENGUAJES DE PROGRAMACION
fscanf(pf, formato, argumentos): lee los argumentos con el formato especificado desde el
archivo apuntado por pf, las especificaciones de formatos son las mismas que se
indicaron para scanf, cada argumento debe ser un puntero a una variable que se
corresponda en tipo con el especificado en el formato.
4to. Los datos pueden ser escritos y ledos utilizando registro o bloques :
fwrite(buffer, longbytes,c,pf);
fread(buffer,longbytes,c,pf);
Cabe destacar que al utilizar estas funciones, se almacena una variable (de
tipo struct) que representa un bloque de datos o campos; es decir, no se
almacena campo por campo. Esta funcin tiene cuatro argumentos: la variable
que se desea grabar, su tamao en bytes, la cantidad de variables y el alias del
archivo donde se desea almacenar.
Pgina 6
LENGUAJES DE PROGRAMACION
5.4
feof(pf): indica si se ha llegado al final del archivo apuntado por pf, devuelve un valor
distinto de cero cuando se intenta leer un elemento del archivo y nos encontramos con un
EOF en caso contrario devuelve un cero.
Pgina 7
LENGUAJES DE PROGRAMACION
unidad f*/
{
printf("Error. No se puede abrir el archivo archivo1.txt");
getch();
exit(0);
}
while(!feof(pa)) /*mientras no se ha llegado a fin de archivo*/
{
fgets(cad,50,pa);/*lee una cadena lo almacena en un array de 50 que
puede tener
espacio en blanco*/
printf("%s",cad); /*imprime en pantalla lo que se almaceno en cad*/
}
getch();
fclose(pa);
/*cierra el archivo*/
Pgina 8
LENGUAJES DE PROGRAMACION
/*leer una lnea de texto en minscula y almacenarla en maysculas en un archivo de datos*/
#include<stdio.h>
#include<ctype.h>
#define NULL 0
void main (void)
{
FILE *fpt; /*define un puntero al tipo de estructura predefinida en FILE */
char c;
clrscr();
while(c != \n);
Pgina 9
LENGUAJES DE PROGRAMACION
getch();
}
/************************ USO DE FSCANF ******************************/
Lee hasta encontrar un blanco o final de lnea.
Devuelve el nmero de tems ledos o EOF si llega a final de fichero.
#include <stdio.h>
void main() {
FILE *pf;
char vector[50];
pf = fopen(c:\\fichero.txt, r); /*Abre el archivo en modo lectura */
while (fscanf (pf, %s, vector) != EOF) /*mientras no se ha llegado a fin
de archivo*/
printf (Leido: %s\n, vector); /*imprime cadena a cadena hasta q
no sea un EOF*/
fclose (pf);
}
Pgina 10
LENGUAJES DE PROGRAMACION
#include <conio.h>
#include <stdlib.h>
void main() {
FILE *pf;
float precio; int unidades; char pieza[50];
clrscr();
printf ("Introduce pieza, cantidad y precio:\n");
scanf ("%s%d%f", pieza, &unidades, &precio);
pf = fopen("c:\\fichero.txt", "w");
fprintf (pf, "%s %d %f ", pieza, unidades, precio); /*escribe en el fichero
los datos especificados*/
fclose (pf);
getch();
}
/************************
******************************/
USO
DE
FPRINTF
FSCANF
Pgina 11
LENGUAJES DE PROGRAMACION
void main(void)
{
/*CREACION DE LA ESTRUCTURA*/
typedef struct
{
char referencia[20];
long precio;
}registro;
/*DECLARACION DE VARIABLES*/
registro reg; /*reg es de tipo registro*/
int bytesreg=sizeof(reg); /*calcula el tamao de un registro*/
FILE *pf;
char sprecio[10],respuesta;
pf=fopen("librito.txt","wb");/*ABRIR ARCHIVO DE MODO BINARIO*/
system("cls");
/*
ENTRADA DE DATOS */
printf("Pulse Ctrl + Z para finalizar (EN MAYUSCULA)\n\n"); /*CTRL+Z indicador
de NULL*/
printf("Referencia: ");
while(gets(reg.referencia)!=NULL) /*si referencia es distinto de null*/
{
printf("Precio: "); gets(sprecio);reg.precio=atol(sprecio);
/*ESCRIBIR UN REGISTRO AL FICHERO*/
fwrite(®,bytesreg,1,pf);
printf("\nReferencia: ");
} /*fin while*/
fclose(pf); /*cierra el fichero*/
clearerr(stdin);/*desactiva el indicador eof de stdin*/
do
{
printf("Desea visualizar el fichero? (s/n)");
respuesta=tolower(getchar());
fflush(stdin);
}while((respuesta!='s')&&(respuesta!='n'));
/*SALIDA DE DATOS*/
if(respuesta=='s')
{
system("cls");
pf=(fopen("librito.txt","rb"));
fread(®,bytesreg,1,pf);
while(!feof(pf))
Pgina 12
LENGUAJES DE PROGRAMACION
{
printf("Referencia: %s\n",reg.referencia);
printf("Precio: %ld\n",reg.precio);
/*leer el siguiente registro del fichero*/
fread(®,bytesreg,1,pf);
} /*fin while*/
} /*fin if*/
getch();
fclose(pf);
}/*fin main*/
El ejemplo anterior lee registros formados por dos campos, referencia y precio
y los almacena en un fichero llamado librito.txt. una vez creado el fichero,
disponemos de la opcin de visualizar el fichero, registro a registro.
La funcin fwrite(), almacena los datos numricos en formato binario. Esto
quiere decir que un int ocupa 2 bytes, un long ocupa 4 bytes, un float ocupa 4
bytes y un doubl ocupa 8 bytes. Ojo no confundir el formato binario
empleado para almacenar un dato numrico, con el modo binario en el que
se abre un fichero, lo cual solo indica que se va a efectuar una conversin de
los finales de lnea y del final de fichero.
/****PROGRAMA QUE CREA UN ARCHIVO DE DATOS QUE CONTENGA
REGISTROS DE CLIENTES**/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define CIERTO 1
typedef struct{
int mes;
int dia;
int anio;
}fecha;
typedef struct{
char nombre[80];
char calle[80];
char ciudad[80];
int no_cuenta;
int tipo_cuenta;
float anteriorsaldo;
float nuevosaldo;
float pago;
Pgina 13
LENGUAJES DE PROGRAMACION
fecha ultimopago;
}registro;
registro leerpantalla(registro cliente);/*funcin prototipo*/
void escribirarchivo(registro cliente);/*funcin prototipo*/
FILE *fpt; /*puntero a estructura*/
void main(void)
{
int indicador=CIERTO;
registro cliente;
system("cls");
/*abrir el archivo en modo escritura*/
if((fpt=fopen("registro.txt","w"))==NULL)
{
printf("Error al abrir el archivo !!");
getch();
exit(0);
}
/*Introducir fecha y asignar valores iniciales*/
printf("SISTEMA DE FACTURACION DE CLIENTES - - INICIALIZACION\n\n ");
printf("Introduzca la fecha actual (mm/dd/aaaa): ");
scanf("%d %d
%d",&cliente.ultimopago.mes,&cliente.ultimopago.dia,&cliente.ultimopago.anio
);
cliente.nuevosaldo=0;
cliente.pago=0;
cliente.tipo_cuenta='A';
/*Bucle principal*/
while(indicador){
/* introducir el nombre del cliente y escribirlo en el archivo*/
printf("\nNombre(introducir \'FIN\'para terminar):");
fflush(stdin);
scanf("%[^\n]",cliente.nombre);
fprintf(fpt,"\n%s\n",cliente.nombre);
/*comprobacin de la condicin de parada*/
if(strcmp(cliente.nombre,"FIN")==0)
break;
cliente=leerpantalla(cliente);
escribirarchivo(cliente);
}/*fin while*/
Pgina 14
LENGUAJES DE PROGRAMACION
fclose(fpt);
}
registro leerpantalla(registro cliente)
/*leer el resto de los datos*/
{
printf("Calle: "); fflush(stdin);scanf("%[^\n]",cliente.calle);
printf("Ciudad: "); fflush(stdin);scanf("%[^\n]",cliente.ciudad);
printf("No de cuenta: "); fflush(stdin);scanf("%d",&cliente.no_cuenta);
printf("Saldo Actual: "); fflush(stdin);scanf("%f",&cliente.anteriorsaldo);
return(cliente);
} /*fin main*/
void escribirarchivo(registro cliente) /*escribir el resto de los datos en el
archivo*/
{
fprintf(fpt,"%s\n",cliente.calle);
fprintf(fpt,"%s\n",cliente.ciudad);
fprintf(fpt,"%d\n",cliente.no_cuenta);
fprintf(fpt,"%c\n",cliente.tipo_cuenta);
fprintf(fpt,"%.2f\n",cliente.anteriorsaldo);
fprintf(fpt,"%.2f\n",cliente.nuevosaldo);
fprintf(fpt,"%.2f\n",cliente.pago);
fprintf(fpt,"%d/%d/
%d\n",cliente.ultimopago.mes,cliente.ultimopago.dia,cliente.ultimopago.anio);
} /*fin main*/
SALIDA DEL PROGRAMA:
Rosa
Domitila
managua
1235
A
1000.00
0.00
0.00
22/11/2011
Jordy
mayoreo
managua
4569
A
5000.00
0.00
0.00
Pgina 15
LENGUAJES DE PROGRAMACION
22/11/2011
Franco
Masaya
Masaya
5632
A
456.00
0.00
0.00
22/11/2011
FIN
Pgina 16
LENGUAJES DE PROGRAMACION
Pgina 17
LENGUAJES DE PROGRAMACION
1. Supongamos que el fichero fichero.txt contiene la cadena Este es el
texto del fichero. Este programa lee diversas palabras del mismo:
Este es el
1
2 3
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main() {
FILE *pf;
char cadena[50];
clrscr();
pf = fopen("c:\\fichero.txt", "r"); /*abre el archivo en modo lectura*/
fscanf (pf, "%s", cadena); /*lee desde el fichero la primera palabra Este*/
printf ("Primera palabra: %s\n", cadena); /*Este*/
fseek (pf, 4, SEEK_CUR); /*el puntero apunta actualmente al inicio del
archivo y avanza 4
bytes a la derecha*/
fscanf (pf, "%s", cadena); /*captura la palabra y la guarda en cadena*/
printf ("Tercera palabra: %s\n", cadena); /*texto*/
fseek (pf, -7, SEEK_END); /**/
fscanf (pf, "%s", cadena);
printf ("Ultima palabra: %s\n", cadena); /*fichero*/
fseek (pf, 11, SEEK_SET);
fscanf (pf, "%s", cadena);
printf ("Cuarta palabra: %s\n", cadena); /*texto*/
getch();
fclose (pf);
getch();
}
Salida del programa:
Primera palabra: Este
Tercera palabra: el
ltima palabra: fichero
Cuarta palabra: texto
Pgina 18
LENGUAJES DE PROGRAMACION
2. Escribir datos directamente a un archivo de acceso directo
#include<stdio.h>
#include<conio.h>
struct clientedatos{
int numcta;
char papellido[15];
char nombre[10];
int balance;
};
void main(void)
{
struct clientedatos cliente;
FILE *cfptr;
clrscr();
if((cfptr = fopen("credito.txt","w+")) == NULL)
{
printf("El archivo no pudo ser abierto");
getch();
}
else
{
printf("Introduzca nmero de cuenta (1 hasta 100, o 0 para
salir)\n\n");
scanf("%d",&cliente.numcta);
while(cliente.numcta != 0)
{
printf("Introduzca Apellido, Nombre y Balance: \n");
scanf("%s
%s
%d",&cliente.papellido,&cliente.nombre,&cliente.balance);
fseek(cfptr,(cliente.numcta - 1) * sizeof(struct clientedatos),
SEEK_SET);
fwrite(&cliente, sizeof(struct clientedatos), 1,cfptr);
printf("Introduzca nmero de cuenta(Para salir presione
0): \n");
scanf("%d",&cliente.numcta);
}
}
fclose(cfptr);
}
Nota: Posiciona el apuntador de posicin de archivo para el archivo
referenciado por cfptr, a la posicin de bytes calculada por (cliente.numcta 1)
* sizeof(struct clientedatos), el valor de esta expresin se conoce como
desplazamiento. Dado que el nmero de cuenta esta entre 1 y 100 pero las
posiciones de bytes ene l archivo empiezan en 0, al calcular la posicin de
Pgina 19
LENGUAJES DE PROGRAMACION
bytes dentro del registro se resta 1 del nmero de cuenta. Entonces para el
registro 1 el apuntador de posicin de archivo se define al byte 0 del archivo.
Como leer datos directamente de un archivo de acceso directo
Utilizando la funcin fread para leer un nmero especifico de bytes de un
archivo a la memoria.
fread (&cliente, sizeof(struct clientedatos), 1, cfptr);
/* Lectura secuencial en un archivo de acceso directo */
#include<stdio.h>
#include<conio.h>
struct clientedatos{
int numcta;
char papellido[15];
char nombre[10];
int balance;
};
main()
{
struct clientedatos cliente;
FILE *cfptr;
if((cfptr = fopen("credito.dat","r")) == NULL)
{
printf("El archivo no pudo ser abierto");
getch();
}
else
{
clrscr();
printf("%-6s %-16s %-11s
%10s\n","CUENTA","P.APELLIDO","NOMBRE","BALANCE");
while(!feof(cfptr))
{
fread(&cliente,sizeof(struct clientedatos),1,cfptr);
if(cliente.numcta != 0)
printf("%-6d %-16s %-11s
%10d\n",cliente.numcta,cliente.papellido,cliente.nombre,cliente.balance);
}
}
fclose(cfptr);
getch();
return 0;
}
Pgina 20
LENGUAJES DE PROGRAMACION
Pgina 21
LENGUAJES DE PROGRAMACION
EJEMPLOS SOBRE FICHEROS:
1. AGENDA TELEFONICA HACIENDO USO DE FICHEROS EN C. CON LAS
FUNCIONES FSEEK, FREAD, FWRITE.
#include
#include
#include
#include
#include
<stdio.h>
<conio.h>
<ctype.h>
<string.h>
<stdlib.h>
struct DIREC{
char nombre[35];
char tele[20];
};
FILE *pack(FILE *a);
void ordena(FILE *a);
void consulta2(FILE *a);
long busca_Clave2(FILE *a,char buscado[]);
void lee(FILE *a);
void imprime(FILE *a);
void main(){
char opcion;
FILE *archivo;
archivo=fopen ("TELE.txt","wb+"); /* usar opcion "wb+" para crear el
archivo .txt y despus cambiar a "rb+" */
while(1){
clrscr();
textattr(6+5*5);
clrscr();
textcolor(YELLOW);
cprintf("
printf("\n\n");
cprintf("
N");
printf("uevo");
textcolor(YELLOW);
cprintf("
L");
printf("ista");
textcolor(YELLOW);
cprintf("
B");
printf("aja");
textcolor(YELLOW);
cprintf("
C");
printf("onsulta");
textcolor(YELLOW);
DIRECTORIO TELEFONICO");
Pgina 22
LENGUAJES DE PROGRAMACION
cprintf("
O");
printf("rdena");
textcolor(YELLOW);
cprintf("
S");
printf("alir");
gotoxy(1,25);
printf("
*** PRESIONE LA LETRA RESALTADA PARA ESCOGER LA OPCION
***");
gotoxy(1,4);
opcion=toupper(getch());
if(opcion=='S')
break;
switch(opcion){
case 'N':{
lee(archivo);
break;
}
case 'L':{
imprime(archivo);
break;
}
case 'B':{
pack(archivo);
break;
}
case 'C':{
consulta2(archivo);
break;
}
case 'O':{
ordena(archivo);
break;
}
}
}
clrscr();
fclose (archivo);
normvideo();
clrscr();
}
/*********************************************************************/
void imprime(FILE *a){
int r,y=0,c=1;
struct DIREC reactivo;
clrscr();
Pgina 23
LENGUAJES DE PROGRAMACION
textcolor(YELLOW);
cprintf("NOMBRE
TELEFONO");
normvideo();
rewind(a);
while(1){
r=fread(&reactivo,sizeof(struct DIREC),1,a);
if(r==0)
break;
if((c%2)!=0){
textattr(6+5*5);
/* textcolor(LIGHTGRAY);*/
printf("\n");
cprintf("%d.- %-30s %16s",c,reactivo.nombre,reactivo.tele);
normvideo();
}
else{
textattr(6+5*4);
/* textcolor(WHITE);*/
printf("\n");
cprintf("%d.- %-30s %16s",c,reactivo.nombre,reactivo.tele);
normvideo();
}
if(y==23){
getch();
y=0;
}
y++;
c++;
}
getch();
}
/*********************************************************************/
void lee(FILE *a){
struct DIREC reactivo;
printf("\n\n");
fflush(stdin);
printf("Nombre : ");strupr(gets(reactivo.nombre)); /*convierte a
maysculas*/
if(strlen(reactivo.nombre)<30){
if(busca_Clave2(a,reactivo.nombre)==0){
printf("Telefono : ");gets(reactivo.tele);
fseek(a,0,SEEK_END);
Pgina 24
LENGUAJES DE PROGRAMACION
fwrite (&reactivo,sizeof(struct DIREC),1,a);
}
else{
printf("\n\nYa existen esos datos!!!");
getch();
}
}
else{
printf("\n\nMximo 25 letras por nombre...");
printf("\n\nEl programa puede daarse si repite este error!!!");
getch();
}
}
/*********************************************************************/
long busca_Clave2(FILE *a,char buscado[]){
long p;
struct DIREC r;
rewind(a);
while(1){
if(fread(&r,sizeof(struct DIREC),1,a)==0)
break;
if(strcmp(r.nombre,buscado)==0){
p=ftell(a)/sizeof(struct DIREC);
return(p);
}
}
return 0;
}
/*********************************************************************/
void consulta2(FILE *a){
char nombre[30];
long p;
struct DIREC r;
printf("\n\nDame el nombre a buscar: ");
strupr(gets(nombre));
p=busca_Clave2(a,nombre);
if(p!=0){
fseek(a,(p-1)*sizeof(struct DIREC),SEEK_SET);
fread(&r,sizeof(struct DIREC),1,a);
printf("\n\n\n");
textcolor(LIGHTGRAY);
cprintf("NOMBRE
TELEFONO");
Pgina 25
LENGUAJES DE PROGRAMACION
normvideo();
printf("\n%-20s %30s",r.nombre,r.tele);
getch();
}
else{
printf("\n\nLa informacin solicitada no existe ...");
getch();
}
}
/*********************************************************************/
void ordena(FILE *a){
int i=0,j=0,s,t;
struct DIREC r;
struct DIREC temp[100];
struct DIREC temporal;
while(1){
fseek(a,i*sizeof(struct DIREC),SEEK_SET);
if(fread(&r,sizeof(struct DIREC),1,a)==0)
break;
temp[j]=r;
i++;
j++;
}
/*Metodo de la burbuja par a la busqueda*/
for(s=0;s<=1;s++){
temporal=temp[s];
temp[s]=temp[t];
temp[t]=temporal;
}
s=0;
i=0;
while(1){
if(s>=j)
break;
r=temp[s];
fseek(a,i*sizeof(struct DIREC),SEEK_SET);
fwrite (&r,sizeof(struct DIREC),1,a);
s++;
i++;
}
printf("\n\nSus archivos han sido ordenados alfabticamente...");
getch();
}
Pgina 26
LENGUAJES DE PROGRAMACION
/*********************************************************************/
FILE *pack(FILE *a){
int i=0;
long p;
char clave[30];
struct DIREC r;
FILE *t;
t=fopen ("TMP.txt","wb");
printf("\n\nDame el nombre a dar de baja: ");
strupr(gets(clave));
p=busca_Clave2(a,clave);
if(p!=0){
while(1){
fseek(a,i*sizeof(struct DIREC),SEEK_SET);
if(fread(&r,sizeof(struct DIREC),1,a)==0)
break;
if(strcmp(r.nombre,clave)!=0){
fseek(a,i*sizeof(struct DIREC),SEEK_SET);
fwrite (&r,sizeof(struct DIREC),1,t);
}
i++;
}
fclose (t);
fclose (a);
remove("TELE.txt");
rename("TMP.txt","TELE.TXT");
t=fopen ("TELE.txt","rb+");
printf("\n\nLa informacin solicitada ha sido dada de baja...");
getch();
return(t);
}
else{
printf("\n\nNo existe el nombre...");
getch();
}
return 0;
}
2. MENU DE OPCIONES CON FICHEROS
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
Pgina 27
LENGUAJES DE PROGRAMACION
Pgina 28
LENGUAJES DE PROGRAMACION
printf("Ingrese texto al fichero: "); gets(texto);
strcpy(nombre_archivo,"C:\\");
strcat(nombre_archivo,nombre);
strcat(nombre_archivo,".txt");
pf=fopen(nombre_archivo,"w");
while(texto[cont]!='\0')
{
fputc(texto[cont],pf);
cont++;
}
getch();
fclose(pf);
}
/********** LECTURA DESDE EL ARCHIVO ***************/
void lectura(void)
{
FILE *pf;
char nombre[10],nombre_archivo[200],texto[200];
int cont=0,longi,i;
clrscr();
printf("Dame el nombre del archivo que va LEER: ");
fflush(stdin);
gets(nombre);
strcpy(nombre_archivo,"C:\\");
strcat(nombre_archivo,nombre);
strcat(nombre_archivo,".txt");
pf=fopen(nombre_archivo,"r");
while(!feof(pf))
{
texto[cont]= fgetc(pf);
cont++;
}
longi=strlen(texto);
for(i=0;i<longi;i++)
printf("%c",texto[i]);
getch();
fclose(pf);
} /*Fin funcin lectura*/
3. LECTURA DE UN FICHERO UNA LNEA CADA VEZ
#include <stdio.h>
#define MAXLIN 80
void main()
Pgina 29
LENGUAJES DE PROGRAMACION
{
FILE *fi;
char *tira[MAXLIN];
fi = fopen("cuanto","r");
while (fgets(tira, MAXLIN, fi) != NULL)
puts(tira);
}
4. ESCRIBIR CINCO REGISTROS EN UN FICHERO Y LEERLO POSTERIORMENTE
#include <stdio.h>
struct t_reg {
int num;
char cad[10];
char car;
int crear_fichero ()
{ FILE *fich;
int i, er_dev = 0;
struct t_reg r;
if ((fich = fopen(fichreg.txt", wb")) == NULL)
{ printf ("Error en apertura del fichero para escritura\n");
er_dev = 1;
}
else {
for (i = 0; i < 5; i + + )
{ r.num = i;
r.car=a+1;
printf("D un nombre: ");
gets(r.cad);
fwrite(&r, sizeof(r), 1, fich);
}
fclose (fich);
}
return er_dev;
}
int Ieer_fichero ()
{ FILE *fich;
struct t-reg r;
int er_dev = 0;
if ((fich = fopen(fichreg.txt", rb")) == NULL)
{ printf ( Error en apertura del fichero para lectura \n );
er_ dev = 1.
}
else
{ fread (&r, sizeof(r), 1, fich);
while (! feof(fich))
{ printf ("%d: %s: %c\n" , r.num, r.cad, r.car);
fread (&r, sizeof(r), 1, fich);
}
Pgina 30
LENGUAJES DE PROGRAMACION
fclose (fich);
}
return er_dev;
}
int main(void)
{ int error;
error = crear_fichero();
if (!error) Ieer_fichero();
}
Pgina 31