Manejo de Ficheros en C

Publicado por admin en

El estándar de “C” contiene varias funciones para la edición de ficheros y están definidas por la cabecera stdio.h.  Adicionalmente, se agrega un tipo FILE , el cual se usa como puntero al contenido del fichero.

COMO ACCEDER AL CONTENIDO DE UN FICHERO EN C

La secuencia de operaciones que se realizan para acceder al contenido de un fichero es la siguiente:

  • Crear un puntero tipo FILE
  • Abrir el archivo utilizando la función fopen y asignarle el resultado de la llamada al puntero anteriormente creado.
  • Realizar las diversas operaciones
  • Cerrar el archivo utilizando la función fclose

FUNCIÓN FOPEN

Esta función resulta de gran importancia porque es la encargada de la apertura y creación de ficheros. El prototipo de la función es el siguiente:

FILE * fopen (const char *filename, const char *opentype);

Los parámetros de entrada son los siguientes:

  • filename: cadena que contiene un nombre de fichero válido
  • opentypeespecifica como se abrirá el archivo. Las opciones son las siguientes:
    • “r” : abrir un archivo para lectura, el fichero debe existir.
    • “w” : abrir un archivo para escritura, se crea si no existe o se sobrescribe si existe.
    • “a” : abrir un archivo para escritura al final del contenido, si no existe se crea.
    • “r+” : abrir un archivo para lectura y escritura, el fichero debe existir.
    • “w+” : crear un archivo para lectura y escritura, se crea si no existe o se sobrescribe si existe.
    • “r+b ó rb+” : Abre un archivo en modo binario para actualización (lectura y escritura).
    • “rb” : Abre un archivo en modo binario para lectura.

FUNCIÓN FCLOSE

La función fclose sirve para cerrar un fichero que se abierto anteriormente con fopen. El prototipo de la función es el siguiente:

int fclose (FILE *stream);

El parámetro stream representa el archivo que se ha abierto anteriormente con fopen. Cuando el valor de retorno es 0 indica que el fichero se ha cerrado correctamente. Sin embargo, en el caso de que haya ocurrido algún error se devolverá la constante EOF.

COMO LEER FICHEROS EN C

Un fichero generalmente debe verse como una cadena de caracteres que esta guardada en el disco con el tipo de archivo correspondiente.

Las funciones más importantes para la lectura de ficheros son las siguientes:

char fgetc(FILE *archivo)
char *fgets(char *buffer, int tam, FILE *archivo)
int fscanf(FILE *fichero, const char *formato, argumento, ...)

FUNCIÓN FGETC

La función fgetc lee un carácter del archivo señalado por el puntero *archivo. Cuando la lectura es exitosa devuelve el carácter leído y, en caso de encontrar el final del archivo se devuelve EOF. Un ejemplo de utilización es el siguiente:

#include <stdio.h>
#include <stdlib.h>
 
int main(){
	FILE *archivo;
	char caracter;
 
	archivo = fopen("prueba.txt","r");
 
	if (archivo == NULL){
            printf("\nError de apertura del archivo. \n\n");
            return EXIT_FAILURE;
        }else{
            printf("\nEl contenido del archivo es \n\n");
            while((caracter = fgetc(archivo)) != EOF)
		printf("%c",caracter);
        }
        fclose(archivo);
	return EXIT_SUCCESS;
}

FUNCIÓN FGETS

Esta función está diseñada para leer cadenas de caracteres hasta n-1 caracteres o un cambio de línea (‘\n’) o el final del archivo (EOF). En caso del salto de línea el carácter ‘\n’ también es leído.

El parámetro buffer es un puntero a un espacio de memoria de tipo char. El segundo parámetro es el tamaño, es decir, el límite en cantidad de caracteres a leer. El último parámetro es un puntero al archivo, como en el resto de las funciones de manejo de archivos.

Un ejemplo de utilización es el siguiente:

#include <stdio.h>
#include <stdlib.h>
 
int main(){
	FILE *archivo;
	char caracteres[50];
 
	archivo = fopen("prueba.txt","r");
 
	if (archivo == NULL){
            printf("\nError de apertura del archivo. \n\n");
            return EXIT_FAILURE;
        }else{
            printf("\nEl contenido del archivo es \n\n");
            while(feof(archivo) == 0){
                fgets(caracteres,100,archivo);
 		printf("%s",caracteres);
	    }
            system("PAUSE");
        }
        fclose(archivo);
	return EXIT_SUCCESS;
}

En el ejemplo se utiliza la función feof que sirve para determinar si el cursor dentro del archivo encontró el final (EOF). La función devolverá falso si no encontró EOF, en caso contrario devolverá un valor distinto a 0.

FUNCIÓN FSCANF

La función fscanf funciona igual que scanf en cuanto a parámetros, no obstante, la entrada se toma de un fichero en lugar del teclado.

Un ejemplo sencillo de utilización es el siguiente:

#include <stdio.h>
#include <stdlib.h>
int main(){
	FILE *archivo;
	char buffer[50];
 
	archivo = fopen("prueba.txt","r");
 
	if (archivo == NULL){
            printf("\nError de apertura del archivo. \n\n");
            return EXIT_FAILURE;
        }else{
            printf("\nEl contenido del archivo es \n\n");
            fscanf(fp, "%s" ,buffer);
 	    printf("%s",buffer);
        }
        fclose(archivo);
	return EXIT_SUCCESS;
}

COMO REALIZAR ESCRITURA DE FICHEROS EN C

Al igual que podemos leer datos de un fichero, también podemos crear y escribir en ficheros. Las funciones más importantes en la escritura de ficheros son las siguientes:

int fputc(int caracter, FILE *archivo)
int fputs(const char *buffer, FILE *archivo)
int fprintf(FILE *archivo, const char *formato, argumento, ...)

FUNCIÓN FPUTC

Esta función escribe un carácter a la vez en el archivo que está siendo señalado con el puntero *archivo. El valor de retorno es el carácter escrito, siempre y cuando la operación sea completada con éxito, en caso contrario será EOF.

El siguiente ejemplo muestra el uso de la función fputc:

#include <stdio.h>
#include <stdlib.h>
 
int main(){
	FILE *archivo;
	char caracter;
 
	archivo = fopen("prueba.txt","w");
 
        printf("\nIntroduce el carácter o enter para terminar: \n\n");
        while((caracter = getchar()) != '\n')
            printf("%c", fputc(caracter, archivo));
 
        fclose(archivo);
	return EXIT_SUCCESS;
}

FUNCIÓN FPUTS

La función fputs tiene un funcionamiento muy parecido a la anterior, pero esta vez se escribe una cadena en el fichero. El valor de retorno es un número entero positivo o EOF en caso de error.

A continuación, se muestra un ejemplo de la función:

#include <stdio.h>
#include <stdlib.h>
 
int main(){
	FILE *archivo;
 	char cadena[] = "Ejemplo de uso de la función fputs.\n";
 
 	archivo = fopen ( "prueba.txt", "w" );
 
 	fputs( cadena, archivo );
 
 	fclose ( archivo );
	return EXIT_SUCCESS;
}

FUNCIÓN FPRINTF

La función fprintf funciona igual que printf en cuanto a parámetros. Sin embargo, la salida se dirige a un archivo.

El siguiente ejemplo muestra el uso de la función:

#include <stdio.h>
#include <stdlib.h>
 
int main(){
	FILE *archivo;
 	archivo = fopen ( "prueba.txt", "w" );
 
 	fprintf(archivo,"Prueba de uso de la función fprintf\n");
 	fclose ( archivo );
	return EXIT_SUCCESS;
}

 


Deja un comentario