Dominando E/S de archivos en C: Crear, abrir, leer, escribir y cerrar archivos con confianza
Visión general de gestión de archivos en C
En C, la biblioteca estándar stdio.h ofrece un conjunto completo de funciones para trabajar con datos persistentes en disco. Al dominar estas herramientas puedes crear, leer, escribir y cerrar archivos de forma fiable, asegurando integridad de datos y estabilidad del programa.
Funciones clave de manejo de archivos
| Función | Propósito |
|---|---|
fopen() | Abrir un archivo existente o crear uno nuevo. |
fclose() | Cerrar un archivo abierto y liberar recursos. |
fprintf() | Escribir texto formateado en un archivo. |
fscanf() | Leer datos formateados desde un archivo. |
getc() | Recuperar un solo carácter de un archivo. |
putc() | Escribir un solo carácter en un archivo. |
fgets() | Leer una línea completa en un búfer. |
fputs() | Escribir una cadena en un archivo sin formateo. |
fseek() | Mover el puntero de archivo a una ubicación especificada. |
ftell() | Recuperar la posición actual del puntero de archivo. |
rewind() | Restablecer el puntero de archivo al principio. |
Modos de archivo explicados
| Modo | Descripción |
|---|---|
"r" | Abrir para lectura; falla si el archivo no existe. |
"w" | Abrir para escritura; trunca archivo existente o crea uno nuevo. |
"a" | Abrir para anexar; las escrituras se añaden al final del archivo. |
"r+" | Abrir para lectura y escritura desde el principio. |
"w+" | Abrir para lectura y escritura; trunca archivo existente. |
"a+" | Abrir para lectura y escritura; anexa nuevos datos. |
Crear un archivo
Para crear o abrir un archivo, primero declaras un puntero a archivo, luego llamas a fopen() con el nombre de archivo y modo deseados:
FILE *fp; fp = fopen("datos.txt", "w");
Si el archivo no existe, fopen() lo crea. Si ya existe, el modo determina si se preserva o sobrescribe su contenido.
También puedes especificar una ruta absoluta:
fp = fopen("D:/datos.txt", "w");
Imágenes que ilustran el paso de creación de archivo:


Cerrar un archivo
Después de terminar todas las operaciones de archivo, siempre llama a fclose() para liberar el descriptor de archivo y vaciar búferes:
fp = fopen("datos.txt", "r"); ... fclose(fp);
La función devuelve 0 en éxito y EOF en error. Aunque el sistema operativo cierra automáticamente los archivos al salir del programa, el cierre explícito se considera una práctica recomendada.
Escritura en un archivo
Al escribir, recuerda añadir caracteres de nueva línea (\n) explícitamente donde sea necesario. A continuación están las funciones de escritura más comunes:
fputc(char, FILE*)– Escribir un solo carácter.fputs(const char*, FILE*)– Escribir una cadena terminada en nulo.fprintf(FILE*, const char*, …)– Escribir salida formateada.
Ejemplo: fputc()
#include <stdio.h> int main() { int i; FILE *fptr; const char *str = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); for (i = 0; str[i] != '\n'; i++) { fputc(str[i], fptr); } fclose(fptr); return 0; }
El archivo de salida fputc_test.txt contiene el texto:

Ejemplo: fputs()
#include <stdio.h> int main() { FILE *fp = fopen("fputs_test.txt", "w+"); fputs("Este es el tutorial de Guru99 sobre fputs,", fp); fputs("No necesitamos usar bucle for\n", fp); fputs("Más fácil que la función fputc\n", fp); fclose(fp); return 0; }
Archivo resultante fputs_test.txt:

Ejemplo: fprintf()
#include <stdio.h> int main() { FILE *fptr = fopen("fprintf_test.txt", "w"); fprintf(fptr, "Aprendiendo C con Guru99\n"); fclose(fptr); return 0; }
Archivo resultante fprintf_test.txt:

Lectura desde un archivo
Tres funciones principales leen datos:
fgetc(FILE*)– Devuelve el siguiente carácter.fgets(char*, int, FILE*)– Lee hastan-1caracteres en un búfer.fscanf(FILE*, const char*, …)– Analiza entrada formateada.
A continuación se muestra una demostración completa que lee fprintf_test.txt usando los tres métodos:
#include <stdio.h> int main() { FILE *fp; char buffer[50], c; fp = fopen("fprintf_test.txt", "r"); printf("----leer una línea----\n"); fgets(buffer, 50, fp); printf("%s\n", buffer); fclose(fp); fp = fopen("fprintf_test.txt", "r"); printf("----leer y analizar datos----\n"); char str1[10], str2[2], str3[20], str4[2]; fscanf(fp, "%s %s %s %s", str1, str2, str3, str4); printf("Leer Cadena1 |%s|\n", str1); printf("Leer Cadena2 |%s|\n", str2); printf("Leer Cadena3 |%s|\n", str3); printf("Leer Cadena4 |%s|\n", str4); fclose(fp); fp = fopen("fprintf_test.txt", "r"); printf("----leer todo el archivo----\n"); while ((c = fgetc(fp)) != EOF) { putchar(c); } fclose(fp); return 0; }
Salida del programa:
----leer una línea---- Aprendiendo C con Guru99 ----leer y analizar datos---- Leer Cadena1 |Aprendiendo| Leer Cadena2 |C| Leer Cadena3 |con| Leer Cadena4 |Guru99| ----leer todo el archivo---- Aprendiendo C con Guru99

E/S interactiva carácter por carácter con getc y putc
Este ejemplo mínimo demuestra leer entrada del usuario, escribirla en un archivo y luego leerla de vuelta:
#include <stdio.h> int main() { FILE *fp; int c; printf("Manejo de Archivos\n"); fp = fopen("demo.txt", "w"); while ((c = getchar()) != EOF) { putc(c, fp); } fclose(fp); printf("Datos Ingresados:\n"); fp = fopen("demo.txt", "r"); while ((c = fgetc(fp)) != EOF) { putchar(c); } fclose(fp); return 0; }
Ejecución de muestra:


Conclusiones
- Un archivo es un espacio de almacenamiento persistente en disco.
- La biblioteca estándar de C proporciona
fopen,fclose,fprintf,fscanfy funciones relacionadas para manipulación fiable de archivos. - Abre siempre un archivo en el modo correcto para controlar comportamiento de lectura, escritura o anexado.
- Cierra archivos explícitamente para vaciar búferes y liberar recursos del sistema.
- Usa
fgetcyputcpara flujos de caracteres simples, yfgets/fscanfpara entrada basada en líneas o formateada. - Al escribir, recuerda terminar cadenas con
\nsi pretendes saltos de línea. - El manejo adecuado de errores (verificar punteros
NULLy valores de retorno) es esencial para aplicaciones robustas.
Lenguaje C
- Tarjetas I/O Explicadas: Cómo Funcionan y Por Qué Importan
- Construye un Cable Breakout I/O y Adaptador Plugboard para Raspberry Pi – Guía Paso a Paso
- Apacer lanza tarjetas flash CV110‑SD y CV110‑MSD de alto rendimiento globales
- Apacer presenta SSDs industriales SV250: lecturas 560 MB/s, escrituras 520 MB/s
- Serie EDAM‑4200 de acceed: Módulos I/O integrados para comunicación de datos escalable y fiable
- Domine variables y tipos de datos primitivos en C#: Guía completa
- Dominando la entrada/salida en C: scanf() y printf() explicados
- Manejo de archivos en C: Dominando E/S con fopen, fprintf, fread y fseek
- Dominando E/S de archivos en C: Crear, abrir y gestionar archivos
- Entendiendo los Archivos de Cabecera en C: Tipos, Uso y Buenas Prácticas
- Entrada/Salida de Archivos en Python: Dominando Operaciones de Lectura, Escritura y Gestión