Archivos


Dentro de las bibliotecas estandar del lenguaje existe un conjunto de funciones para la creación y manipulación de archivos.

Generalmente, cuando se utilizan archivos existen tres pasos que deben seguirse:

Apertura del archivo

La apertura del archivo se puede realizar a traves de la utilización de la función fopen. El prototipo de esta función es:

FILE *fopen(char *filename, char *mode);

La función fopen abre un file con nombre filename y asocia con el un stream. La función retorna un puntero a ser utilizado para identificar al stream en operaciones subsecuentes.

El string mode puede tener los siguientes valores y significados:

Valor Descripción
r Abre el archivo solo para lectura
w Crea el archivo para escritura, si el archivo ya existía, será sobreescrito.
a Abre el archivo para escritura por sobre el final del archivo (append). Si el archivo no existe lo crea para escritura.
r+ Abre un archivo existente para actualización (lectura y escritura).
w+ Crea un nuevo archivo para actualización (lectura y escritura) Si el archivo ya existe, es sobreescrito.
a+ Abre para agregado (o crea el archivo si no existe).

Manipulación

Existen un conjunto de funciones que permiten manipular el contenido de un archivo:

fgetchar
fwrite
fread
fgets
fprintf
fscanf
...

Todas estas funciones reciben entre otros argumentos un puntero a FILE al stream sobre el que deben operar.

Cierre del archivo

Para concluir el uso de un archivo, este debe cerrarse. Para ello se utiliza la función fclose.

Ejemplo:

ejem_archiv.c
#include <stdio.h>

#include <stdlib.h>

void Genera(FILE *out, int n);

int main(int argc, char *argv[])
{
  FILE *out;
  int numVals;

  if(argc != 3)    /* Chequea que esten los argumentos */
  {
    puts("USO: ./genera filename numVals");
    puts("     genera el archivo filename con numVals valores al azar");
    puts("     el archivo contiene un primer entero con numVals");
    puts("     seguido por los valores propiamente dichos");
    exit(0);
  }
  if((out = fopen(argv[1],"w")) == NULL)   /* Abre el archivo */
  {
    perror(argv[1]);
    exit(1);
  }
  sscanf(argv[2], "%d", &numVals);  /* lee el número de valores      */
  Genera(out, numVals);             /* genera y salva los valores    */
  fclose(out);                      /* por ultimo, cierra el archivo */
  return 0;
}

void Genera(FILE *out, int n)
{
  int i;
  fprintf(out, "%d\n", n);         /* escribe como primer valor a n */
  for(i = 0; i < n; i++)
    fprintf(out, "%d\n", rand());  /* escribe los n valores         */
}

Puntos a notar: