Programación C/C++ · 6 min read · Oct 09, 2025

Aprendiendo C/C++ Paso a Paso - Página 12

12. Paso a Paso CorC++ — Programación en C - Archivos

Manejo de Archivos

Introducción

Veamos la salida del siguiente programa.

| | |

Sí, acepta un registro de información del estudiante y lo muestra.
Aquí está el mismo programa, pero incluye declaraciones con algunas modificaciones.

| | |

Los dos programas anteriores son iguales, pero el segundo programa contiene una declaración resaltada ( FILE *fp = fopen(“stud.dat”, “a+”);) y algunas modificaciones como ‘f printf’, ‘ fp’. Solo se incluyeron algunas modificaciones. Estas modificaciones afectan la transferencia de datos de la consola al disquete en el archivo stud.dat. Este proceso se conoce como control de archivos/gestión de archivos/organización de archivos.

Esta es la forma más fácil de transferir la salida del monitor a un archivo utilizando la declaración de control de archivos.

| | |

En realidad, el procesamiento de archivos implica muchas operaciones así como métodos para implementar. Aquí está el proceso real para manejar archivos.

Manejo de Archivos

Generalmente, cada programa tiene que presentar los valores resultantes en la pantalla (el 1er programa ilustra esto). Pero esos valores se eliminan de la memoria cada vez que se termina el programa. Si queremos mantener registros de forma permanente, guárdalos en un archivo. Cada archivo tiene algunas operaciones, aquí hay algunas;

| | |

| | |

Operaciones de Archivos

fopenAbre el flujo filename en el modo mode & si tiene éxito, devuelve un puntero al flujo recién abierto; o Null de lo contrario.
Sintaxis **FILE fopen(const char filename, const char *mode);

| Ej. | FILE fp = fopen(“stud.dat”, “r”);   /  Leer del archivo  /
FILE
fp = fopen(“emp.dat”, “w”); /  Escribir en el archivo  /
FILE fp = fopen(“emp.dat”, “a+”);           /  Leer y Escribir en el archivo / | | | Modo:
La cadena de modo utilizada en las llamadas a fopen, es uno de los siguientes valores:
Modo     Descripción r Abre solo para lectura w Crea para escritura (Si un archivo con ese nombre ya existe, será sobrescrito). a Añadir; abrir para escribir al final del archivo, o crear para
escribir si el archivo no existe.
r+ Abre un archivo existente para actualización (lectura y escritura) w+ Crea un nuevo archivo para actualización (lectura y escritura).
Si un archivo con ese nombre ya existe, será sobrescrito.
a+ Abre para añadir; abrir para actualización al final del archivo, o
crear si el archivo no existe. Para especificar que un archivo dado se está abriendo o creando en modo texto,
añade “
t “ a la cadena ( rt, w+t,*
etc.).

Para especificar el modo binario, añade “ b “ a la cadena ( wb, a+b, etc.). | | fclose | Cierra el archivo apuntado por fp & devuelve 0 en caso de éxito, EOF se devuelve en caso de error | | Sintaxis | Int fclose(FILE *fp); | | ej. | Fclose(fp);  fclose(stud);   fcloseall(); | | fprintf | Envía salida formateada a un flujo. Usa los mismos especificadores de formato que printf, pero envía la salida al flujo especificado. Devuelve el número de bytes de salida o EOF en caso de error. | | Sintaxis | Fprintf(fptr, “Cadena de Control”, lista); | | Ej. | Fprintf(fp, “%d %s %d %d %d”, sno, name, sub1, sub2, sub3);
fprintf(emp, “%d %s %d”, eno, name, sal); | | fscanf | Esta función se utiliza para leer datos formateados de un archivo especificado. | | Sintaxis: | Fscanf(fptr, “Cadena de Control”, lista); | | Ej. | Fscanf(fp, “%d %s %d %d %d”, &sno, name, &sub1, &sub2, &sub3);
fscanff(emp, “%d %s %d”, &eno, name, &sal); | | fwrite | Fwrite añade un número especificado de elementos de datos de igual tamaño a un archivo de salida. | | Sintaxis: | Size_t fwrite(const void ptr, size_t size, size_t n, FILEstream); Argumento  Qué Es/Hace Ptr Puntero a cualquier objeto; los datos escritos comienzan en ptr Size Longitud de cada elemento de datos N Número de elementos de datos a ser añadidos stream Especifica el archivo de salida
El número total de bytes escritos es  (
n size) | | fread | Fread recupera un número especificado de elementos de datos de igual tamaño de un archivo de entrada. | | Sintaxis | Size_t fread(void ptr, size_t size, size_t n, FILEstream); Argumento  Qué Es/Hace Ptr Puntero a cualquier objeto; los datos escritos comienzan en ptr size Longitud de cada elemento de datos n Número de elementos de datos a ser añadidos stream Especifica el archivo de salida
El número total de bytes escritos es (
n
size) | | rewind
| Reposiciona el puntero de archivo al principio del flujo | | Sintaxis | Void rewind(FILE stream);
Ej.      fewind(fp);
Rewind(stream) es equivalente a fseek(stream, 0L, SEEK_SET)
es excepto que rewind borra los indicadores de fin de archivo y error, mientras que fseek solo borra el indicador de fin de archivo. Después de rewind, la siguiente operación en un archivo de actualización puede ser entrada o salida. | |
fseek | El puntero de archivo para el flujo se posiciona en el número de bytes de desplazamiento calculado a partir de la posición especificada por whence. El desplazamiento puede ser cero, negativo o positivo. Los símbolos definidos SEEK_CUR, SEEK_SET & SEEK_END se utilizan como especificadores whence para indicar la posición actual. BOF & EOF respectivamente. Devuelve 0 si tiene éxito o un valor distinto de cero en caso de fallo. | | Sintaxis | Int fssek(FILE
stream, long offset, int whence); | | ftell
| Devuelve la posición actual del puntero de archivo en caso de éxito o un valor negativo en caso de error. | | Sintaxis | Long ftell(FILE *stream); | | feof | Es una macro para devolver un valor distinto de cero si se ha alcanzado el final del archivo en el flujo. | | Sintaxis | Int feof(FILE *stream); | | eof | Verifica si el marcador de posición en el archivo dado por su manejador está al final del archivo. Si es así, devuelve 0, se devuelve 1 si el marcador de posición NO está al final del archivo y un error se indica por el establecimiento de errno y el valor de retorno de –1. | | Sintaxis | Int eof(int handle); | | fgets /
fputs | La función fgets/fputs obtiene/coloca una cadena (de tamaño n bytes) en el archivo apuntado por el flujo y devuelve fin de archivo en caso de error. | | Sintaxis | Char fgets(char s, int n, FILE *stream); | | fgetc/fputc
Sintaxis | Lee/escribe un carácter de un flujo.
Int fgetc/fputc(FILE *stream); | | fgetchar/
fputchar | Estos son equivalentes a los anteriores fgetc/fputc.

Escribe un programa para leer datos de un estudiante y almacenarlos en un archivo de datos.

| | / Programa para crear un archivo de datos de estudiantes /
/ 85_write.c /
#include
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10],ch;
FILE *fp = fopen(“stud.dat”, “w”);
do{
clrscr();
printf(“Ingrese el número de estudiante        “); scanf(“%d”, &sno);
printf(“Ingrese el nombre del estudiante          “); scanf(“%s”, name);
printf(“Ingrese las calificaciones de 3 materias      “);
scanf(“%d%d%d”, &sub1, &sub2, &sub3);
fprintf(fp, “%d %s %d %d %d\n”, sno, name, sub1, sub2, sub3);
printf(“\n\n¿Quieres continuar… (y/n)”); ch = getche();
}while(toupper(ch) != ‘N’);
fclose(fp);
return 0;
} |

Escribe un programa para recuperar datos de un archivo de datos de estudiantes.

| | / Programa para recuperar datos de un archivo de datos de estudiantes /
/ 86_read.c /
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10];
FILE *fp = fopen(“stud.dat”, “a+”);
clrscr();
printf(“Los registros de estudiantes son los siguientes….\n”);
do{
fscanf(fp, “%d%s%d%d%d\n”, &sno, name, &sub1, &sub2, &sub3);
printf(“%5d%15s%3d%3d%3d\n”, sno, name, sub1, sub2, sub3);
}while(!feof(fp));
fclose(fp);
return 0;
} |

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.