Son utilizados para almacenar datos de forma persistente en el disco, permitiendo guardar información y recuperarla en futuras ejecuciones.

a+ modo de apertura del archivo

r+ lectura de archivo

w+ escribe el archivo

fwrite para escribir en un archivo

//manejo de archivos
#include <iostream>
using namespace std;

//variable apuntadora (señala un lugar en el DD, memoria, etc
FILE *pArchivo;
FILE *pArchivo2;

struct dtAlumno{
	int matricula;
	string nombre;
	int edad;
}regAlumno;

void guardarAlumno(){
	cout << "Ingrese una matricula: ";
	cin >> regAlumno.matricula;
	fflush(stdin);
	cout << "Ingrese un nombre: ";
	getline(cin, regAlumno.nombre);
	cout << "Ingrese la edad: ";
	cin >> regAlumno.edad;	

pArchivo = fopen("C:\\\\Mis programas\\\\Alumnos.txt", "a+"); // 

fwrite(&regAlumno, sizeof(regAlumno), 1, pArchivo);
fclose(pArchivo);
cout << "\\nAlumno guardado" << endl;
getchar();
}

void mostrarAlumnos(){
	pArchivo = fopen("C:\\\\Mis programas\\\\Alumnos.txt", "a+"); //read
	
	cout << "\\n ------ Mostrar alumnos ------";
	while(fread(&regAlumno, sizeof(regAlumno), 1, pArchivo)){
		cout << "\\n\\nMatricula: " << regAlumno.matricula;
		cout << "\\nNombre: " << regAlumno.nombre;
		cout << "\\nEdad: " << regAlumno.edad;
	}
	
	fclose(pArchivo);
	getchar();
}

main(){
	int opc;
	
	do{
		system("cls"); //limpiar pantalla
		cout << "CONTROL DE ALUMNOS";
		cout << "\\n1. Guardar alumno";
		cout << "\\n2. Mostrar alumnos";
		cout << "\\n3. Buscar alumno por nombre";
		cout << "\\n4. Buscar alumno por matricula";
		cout << "\\n5. Eliminar alumno";
		cout << "\\n6 Salir";
		cout << "\\nOpcion: ";
		cin >> opc;
		fflush(stdin);
		
		switch(opc){
			case 1: 
				guardarAlumno();
				break;
			case 2:
				mostrarAlumnos();
				break;
			case 6:
				cout << "Gracias por utilizar este programa :)";
				break;
			default:
				cout << "\\nOpcion invalida" << endl;
				system("pause");
		}
	}while(opc != 6);
}