Leer archivo de texto con C y fread

Publicado por parzibyte en

Leer contenido de archivo de texto en C

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

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.

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.

Probar lectura de archivo desde C online

Si no deseas compilarlo por el momento, entonces puedes probarlo sin instalar nada y sin salir del post.


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB.Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron.Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scriptsLa plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C.Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: