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:
- Abrir el archivo.
- Manipularlo.
- Cerrar el archivo.
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:
#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:
- Uso de argc y argv para recibir información en la línea de comando. El primer argumento, argc, mantiene la cantidad de argumentos de la linea de comando (incluyendo el nombre del programa. argv apunta a un arreglo de strings conteniendo los argumentos propiamente dichos (incluyendo el nombre del programa).
- Chequeo de apertura correcta. La función fopen retorna como resultado un puntero a FILE a utilizar para referirse al stream en las funciones de manipulación y cierre del archivo o NULL si no se pudo realizar la apertura del archivo correctamente. Es de muy buena práctica realizar las comprobaciones correspondientes para verificar que las acciones se van produciendo de manera adecuada.