You are on page 1of 7

Curso: Algoritmo y Estructuras de Datos II

Ciclo: 2014-II

Archivo en C
1. Introduccin
El sistema de archivos ANSI C se compone de varias funciones interrelacionadas. Las ms comunes se
muestran a continuacin:

Nombre

Funcin

fopen

Abre un archivo

fclose

Cierra un archivo

fputc

Escribe un carcter en un archivo

fgetc

Lee un carcter de un archivo

fseek

Busca un byte especifico de un archivo

fprintf

Hace lo mismo en archivo que el printf en consola

fscanf

Hace lo mismo en archivo que el scanf en consola

feof

Devuelve cierto si se ha llegado al final del archivo

ferror

Devuelve cierto si se ha producido un error

rewind

Coloca el localizador de posicin del archivo al principio del mismo

remove

Elimina el archivo
Tabla 1 Funciones ms comunes del sistema de archivo

Estas funciones requieren que se incluya la librera de cabecera stdio.h en cualquier programa en que
se vaya a utilizar.
2. El Puntero a Archivo
El puntero a archivo es el hilo comn que unifica el sistema de E/S con buffer. Un puntero a un archivo
es un puntero a una informacin que define varias cosas sobre l, incluyendo su nombre, su estado y
su posicin final. En esencia, el puntero a archivo identifica un archivo de disco especfico y lo utiliza
el flujo asociado para dirigir el funcionamiento de las funciones de E/S con buffer. Un puntero a archivo
es una variable de tipo puntero FILE, que est definido es stdio.h.
3. Funciones principales en Archivos
fopen:
Abre un flujo para que pueda ser utilizado, lo asocia a un archivo y despus devuelve el puntero
FILE de ese flujo.
Sintaxis:
FILE *fopen(char *nombre_archivo,char modo);
En donde:
Nombre_archivo: Una cadena que contiene un nombre de fichero vlido. El nombre puede incluir
el camino completo.

Ing. Alejandro Chayan Coloma

Curso: Algoritmo y Estructuras de Datos II

Ciclo: 2014-II

Modo: Especifica en tipo de fichero que se abrir o se crear y el tipo de datos que puede contener,
de texto o binarios:

Modo

Significado

Abre un archivo de texto para lectura

Crea un archivo de texto para escritura

Abre un archivo de texto para aadir. Si el archivo no existe se crea

rb

Abre un archivo binario para lectura

wb

Crea un archivo binario para escritura

r+

Abre un archivo de texto para lectura/escritura

w+

Crea un archivo de texto para lectura/escritura

a+

Abre o crea un archivo de texto para lectura/escritura

rb+

Abre un archivo binario para lectura/escritura

wb+

Crea un archivo binario para lectura/escritura


Tabla 2 Valores validos de modo

fclose
Cierra el flujo que fue abierto mediante una llamada a fopen( ). Escribe toda la informacin que
todava se encuentra en el buffer del disco al archivo y realiza un cierre formal del archivo a nivel
de sistema operativo.
Sintaxis:
int fclose(FILE *Archivo);
fputc
Escribe caracteres en un flujo que haya sido abierto previamente para operaciones de escritura
utilizando la funcin fopen.
Sintaxis:
int fputc( int carcter, FILE * Archivo);
#include <stdio.h>
void main ()
{
FILE *fp;
char caracter;
fp = fopen ("fichero.txt", "r+" );
printf("\nIntrouce un texto al fichero: ");
while((caracter = getchar()) != '\n')
{
printf("%c", fputc(caracter, fp));
}
fclose (fp);
}

Ing. Alejandro Chayan Coloma

Curso: Algoritmo y Estructuras de Datos II


fgetc
Lee caracteres de un flujo abierto en modo de lectura mediante fopen.
Sintaxis:
int fgetc (FILE *Archivo);
#include <stdio.h>
int main()
{
char nombre[10]="datos.dat";
FILE *fichero;
int i;
fichero = fopen( nombre, "r" );
printf( "Fichero: %s -> ", nombre );
if( fichero )
printf( "existe (ABIERTO)\n" );
else
{
printf( "Error (NO ABIERTO)\n" );
return 1;
}
printf( "Los 18 primeros caracteres del fichero: %s\n\n", nombre );
for( i=1; i<=18; i++)
printf( "%c", fgetc(fichero) );
if( !fclose(fichero) )
printf( "\nFichero cerrado\n" );
else
{
printf( "\nError: fichero NO CERRADO\n" );
return 1;
}
}
feof
Determina si ha llegado a alcanzar el fin del archivo.
Sintaxis:
int feof(FILE *Archivo);

Ing. Alejandro Chayan Coloma

Ciclo: 2014-II

Curso: Algoritmo y Estructuras de Datos II

Ciclo: 2014-II

#include <stdio.h>
int main()
{
int tamanyo=0;
FILE *ficheroEntrada, *ficheroSaliada;
char nombreEntrada[11]="datos2.dat", nombreSalida[11]="datos3.dat";
ficheroEntrada = fopen( nombreEntrada, "r" );
printf( "Fichero de Lectura: %s -> ", nombreEntrada );
if( ficheroEntrada )
printf( "existe (ABIERTO)\n" );
else
{
printf( "Error (NO ABIERTO)\n" );
return 1;
}
ficheroSalida = fopen( nombreSalida, "w" );
printf( "Fichero de Lectura: %s -> ", nombreSalida );
if( ficheroSalida )
printf( "creado (ABIERTO)\n" );
else
{
printf( "Error (NO ABIERTO)\n" );
return 1;
}
while( !feof(ficheroEntrada) )
{
fputc( fgetc(ficheroEntrada)+3, ficheroSalida ); /* Desplazar cada carcter 3 caracteres: a -> d, b -> e, ... */
tamanyo++;
}
printf( "El fichero \'%s\' contiene %d caracteres.\n", nombreEntrada, tamanyo );
if( !fclose(ficheroSalida) )
printf( "Fichero: %s cerrado\n", nombreSalida );
else
{
printf( "Error: fichero: %s NO CERRADO\n", nombreSalida );
return 1;
}
if( !fclose(ficheroEntrada) )
printf( "Fichero: %s cerrado\n", nombreEntrada );
else
{
printf( "Error: fichero: %s NO CERRADO\n", nombreEntrada );
return 1;
}
return 0;
}

fread
Lee bloques de datos. Esta funcin est pensada para trabajar con registros de longitud constante.
Es capaz de leer desde un fichero uno o varios registros de la misma longitud y a partir de una
direccin de memoria determinada.

Ing. Alejandro Chayan Coloma

Curso: Algoritmo y Estructuras de Datos II

Ciclo: 2014-II

Sintaxis:
size_t fread(void *buffer, size_t num_bytes, size_t cuenta, FILE *Archivo);
Lectura de datos por campo de registro
fread(&l.codigo,sizeof(char),5,arch);
En esta sentencia se est leyendo desde el archivo arch una variable de la estructura Libro.
Lectura de datos por bloque
fread(&l,sizeof(libro),1,arch);
En esta sentencia se est leyendo desde el archivo arch un registro, es decir un libro cuyos campos
son cdigo, titulo, autor, npag.
fwrite
Escribe bloques de datos. Esta funcin tambin est pensada para trabajar con registros de longitud
constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de
la misma longitud almacenados a partir de una direccin de memoria determinada.
Sintaxis:
size_t fwrite(void *buffer, size_t num_bytes, size_t cuenta, FILE *Archivo);
Grabacin de datos por campo de registro
fwrite(&l.codigo,sizeof(char),5,arch);
En esta sentencia se est grabado al archivo arch una variable de la estructura Libro.
Grabacin de datos por bloque
fwrite(&l,sizeof(libro),1,arch);
En esta sentencia se est grabando al archivo arch un registro, es decir un libro cuyos campos son
cdigo, titulo, autor, npag

Ing. Alejandro Chayan Coloma

Curso: Algoritmo y Estructuras de Datos II

Ciclo: 2014-II

Ejemplo de fread y fwrite


#include <stdio.h>
int main()
{
FILE *fichero;
char nombre[11] = "datos5.dat";
unsigned int dinero[10] = { 23, 12, 45, 345, 512, 345, 654, 287, 567, 124 };
unsigned int leer[10], i;
fichero = fopen( nombre, "w+" );
printf( "Fichero: %s -> ", nombre );
if( fichero )
printf( "creado (ABIERTO)\n" );
else
{
printf( "Error (NO ABIERTO)\n" );
return 1;
}
printf( "Escribiendo cantidades:\n\n" );
for( i=0; i<10; i++ )
printf( "%d\t", dinero[i] );
fwrite( dinero, sizeof(unsigned int), 10, fichero );
printf( "\nLeyendo los datos del fichero \"%s\":\n", nombre );
rewind( fichero );
fread( leer, sizeof(unsigned int), 10, fichero );
for( i=0; i<10; i++ )
printf( "%d\t", leer[i] );
if( !fclose(fichero) )
printf( "\nFichero cerrado\n" );
else
{
printf( "\nError: fichero NO CERRADO\n" );
return 1;
}
return 0;
}

ferror
Determina si se ha producido un error en una operacin sobre un archivo.
Sintaxis:
int ferror(FILE *Archivo);
rewind
Inicializa el indicador de posicin al principio del archivo indicado por su argumento
Sintaxis:
void rewind( FILE *Archivo);

Ing. Alejandro Chayan Coloma

Curso: Algoritmo y Estructuras de Datos II

Ciclo: 2014-II

PROYECTO FINAL DE INVESTIGACIN

Descripcin
Crear un programa que realice el proceso de venta de una farmacia, para lo cual se debe de analizar
en base a listas haciendo uso de struct, la elaboracin de este proyecto de investigacin tiene como
finalidad que el alumno combine las diferentes listas estudiadas en clase y tambin hacer uso de
archivos en C como una simulacin de una Base de Datos.

Modulo a Implementar
A continuacin se detallan los modulo que debe contar el proyecto:
a) Mantenimiento: En este mdulo se podr realizar las inserciones y modificaciones de las
listas que necesitan dar mantenimiento para luego usar los datos en el proceso principal de
negocio.
b) Consultas: En este mdulo se podrn realizar todas las consultas posibles y necesarias de los
datos.
c) Listados: En este mdulo se podr visualizar segn la lista elegida los datos, presentar en
forma horizontal (usar funcin gotoxy);
d) Proceso Principal del negocio (ventas): Viene a ser el modulo principal por el cual gira el
negocio, es decir se tendr que realizar todas las validaciones posibles para poder llevar a cabo
el proceso de venta, para lo cual se debe trabajar con los datos anteriormente ingresados.
e) Reportes: En este mdulo se podr visualizar los reportes ms importantes para la Empresa
(farmacia), como mnimo se debe contar con 04(cuatro) reportes.
Nota:
A parte de estos modulo implementados, agregar una opcin dentro del men principal con el
nombre de Integrantes, en la cual se mostraran los integrantes que forman el grupo.

Entrega y Exposicin
El proyecto estar formado como mximo de 04(cuatro) alumnos
Para la entrega y exposicin de proyecto se realizar el da 23 de marzo del presente ao.
El proyecto ser entregado en una carpeta el cual debe llevar los apellidos del coordinador del
grupo (Ejemplo: nombre de carpeta Perez_Lopez usar el carcter _)
Al momento de la entrega y explicacin las listas deben de contener datos (Archivos).

Ing. Alejandro Chayan Coloma

You might also like