Ya vimos cómo leer un archivo de texto con Golang. Ahora se verá cómo leer el contenido de un archivo de texto con C, utilizando la función fread acompañada de fopen y otras funciones para manejar archivos en C.

Leer contenido de archivo de texto en C

Lo que se hará es simple: leer el contenido de un .txt e imprimir su contenido en la pantalla; leyendo poco a poco el archivo utilizando un búfer de determinado tamaño especificado en bytes.

Leer contenido de un archivo en C

No es recomendable leer todo el contenido a la vez, sino leer trozos pequeños del mismo. Para esto, la librería estándar en C provee el método fread; que lee algunos datos de una fuente (de tipo FILE en este caso) y va avanzando el “puntero”.

De esta manera, leemos pocos datos (los que se especifican en el búfer) en distintas iteraciones; hasta terminar de leer todo el archivo alcanzando el End Of Line o EOF.

Aquí está el código fuente para leer el contenido de un archivo de texto en C. Lo dejo aquí y lo explico más abajo.

Hola, soy un archivo de texto para demostrar algunos tutoriales de parzibyte.me. Puedo contener cualquier tipo de contenido, por ejemplo, saltos,
    tabulaciones
y cualquier

otra


cosa.
#include <stdio.h>// Todas las funciones como fread, fwrite, fopen, fclose y printf
#include <stdlib.h>// EXIT_FAILURE y EXIT_SUCCESS
#define TAMANIO_BUFER 16 // Cuántos bytes leer en cada iteración

int main() {
  unsigned char bufer[TAMANIO_BUFER];
  FILE *archivo;
  char *nombreArchivo = "archivo.txt";
  size_t bytesLeidos;

  archivo = fopen(nombreArchivo, "r"); // Abrir en modo read
  // Si es NULL, entonces no existe, o no se pudo abrir
  if (!archivo) {
    printf("¡No se pudo abrir el archivo %s!", nombreArchivo);
    return EXIT_FAILURE;
  }

  // Mientras no alcancemos el EndOfLine del archivo...
  while (!feof(archivo)) {
    // Leer dentro del búfer; fread regresa el número de bytes leídos
    bytesLeidos = fread(bufer, sizeof(char), sizeof(bufer), archivo);
    // Para depurar, se imprime la cantidad de bytes leídos (se puede quitar esa parte)
    printf("\nSe han leido %lu bytes:\n", bytesLeidos);
    // Y el contenido del búfer también es impreso
    fwrite(bufer, sizeof(char), bytesLeidos, stdout);
  }
  // Al final, se cierra el archivo
  fclose(archivo);
  return EXIT_SUCCESS;
}

En el gist se encuentra también el archivo que es leído. Ahora es momento de explicar cómo funciona el código.

Explicación del código

Comenzamos declarando un apuntador a FILE, así como el búfer y el nombre del archivo. Se llama a fopen pasándole el nombre del archivo y alojando el resultado en la variable de tipo FILE.

En caso de que el archivo no se pueda abrir, fopen devuelve NULL, así que hacemos esa comprobación y salimos del programa en caso de que no se pueda abrir el archivo.

Más tarde hacemos un ciclo while, en donde llamamos a feof. Dicha función indica si hemos alcanzado el EOF al leer un archivo; en caso de alcanzarlo, el ciclo se detiene.

Dentro del ciclo viene la parte importante, y es llamar a fread, en donde leemos desde el archivo el número de bytes que soporta el búfer. La función fread devuelve el número de bytes leídos, la mayoría de veces, si nuestro búfer es más pequeño que la cantidad de datos, se mostrará la longitud del búfer.

En la última lectura, algunas veces fread devuelve un número menor de bytes o 0, pues se ha llegado al final del archivo. Todo esto que te digo puede experimentarse al cambiar el número de bytes del búfer (recomiendo cambiarlo a 100 y luego a 1024)

Se utiliza fwrite para imprimir los datos (escribe el contenido del búfer a stdout), aunque esto no es estrictamente necesario, pues puede que deseemos leer los datos para copiarlos o para cualquier otra cosa. No usamos printf porque el búfer tiene los datos como bytes, sin el carácter de terminación.

El avance de la lectura se hace automáticamente al llamar a fread, por lo que no necesitamos hacer nada que tenga que ver con aritmética de punteros ni cosas de esas.

Al final de todo cerramos el archivo usando fclose.

Compilar ejemplo

Descarga el código fuente y guárdalo como leer_archivo.c. Asegúrate de descargar también el archivo que se va a leer, o crea uno nuevo pero ponlo en el mismo directorio que el código fuente.

Si estás en Windows y tienes el compilador de C instalado como se detalla en este post, o estás en Linux, ejecuta:

gcc -o leer_archivo leer_archivo.c

Eso creará un binario llamado leer_archivo que podrás ejecutar.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.