Aquí te muestro un ejemplo de un programa completo con todos los tipos más usados:
// ConsoleApplication2-ficheros-basico-r-w-char-string-01.cpp :
// This file contains the 'main' function. Program execution begins and ends there.
// Rutinas de archivos y ficheros. Todos los tipos básicos.
// Escribe/Lee caracter
// Escribe/Lee string
// Escribe/Lee formato
// Escribe/Lee Multiples Lineas Formato
// Escribe/Lee estructura
// Escribe/Lee estructura con arreglo
#define _CRT_SECURE_NO_WARNINGS //Es para que el compilador no de errores
#include <iostream>
#include <stdio.h>
#include<string.h>
#define MAX_ELEMT 6
struct persona {
char nombre[20];
int edad;
float altura;
};
int escribir_caracter_por_caracter(char caracter_escribir_func, char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
if (fopen_s(&fp_func, filename_func, "a+") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
printf("El archivo %s esta abierto", filename_func);
fputc(caracter_escribir_func, fp_func);
fclose(fp_func);
return 1; // Exitoso.
}
int escribir_string(char string_func[], char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
if (fopen_s(&fp_func, filename_func, "a+") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
printf("El archivo %s esta abierto", filename_func);
fputs(string_func, fp_func);
fclose(fp_func);
return 1; // Exitoso.
}
int leer_string(char string_func[], char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
if (fopen_s(&fp_func, filename_func, "r") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
printf("El archivo %s esta abierto", filename_func);
fgets(string_func,128,fp_func);
fclose(fp_func);
return 1; // Exitoso.
}
int escribir_formato(persona* persona_func, char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
long numero = 0;
printf("\nInserte datos:");
printf("\nNombre: ");
//strcpy_s(persona_func->nombre, "Juan");
scanf("%s", persona_func->nombre);
printf("\nEdad: ");
scanf("%i", &(persona_func->edad));
printf("\n:Altura: ");
scanf("%f", &(persona_func->altura));
if (fopen_s(&fp_func, filename_func, "w") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
numero = fprintf(fp_func, "%s %d %f\n", persona_func->nombre, persona_func->edad, persona_func->altura);
numero = fclose(fp_func);
return 1; //exitoso
}
int escribir_formato_mult_line(persona* persona_func, char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
int fin_archivo = 0;
long numero = 0;
int contador = 0;
printf("\nInserte datos:");
printf("\nNombre: ");
//strcpy_s(persona_func->nombre, "Juan");
scanf("%s", persona_func->nombre);
printf("\nEdad: ");
scanf("%i", &(persona_func->edad));
printf("\n:Altura: ");
scanf("%f", &(persona_func->altura));
if (fopen_s(&fp_func, filename_func, "a") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
fin_archivo = fprintf(fp_func, "%s %d %f\n", persona_func->nombre, persona_func->edad, persona_func->altura);
numero = fclose(fp_func);
return 1; //exitoso
}
int escribir_estructura(persona *persona_func, char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
long numero = 9;
printf("\nInserte datos:");
printf("\nNombre: ");
//strcpy_s(persona_func->nombre, "Juan");
scanf("%s", persona_func->nombre);
printf("\nEdad: ");
scanf("%i", &(persona_func->edad));
printf("\n:Altura: ");
scanf("%f", &(persona_func->altura));
if (fopen_s(&fp_func, filename_func, "wb") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
numero=fwrite(persona_func, sizeof(struct persona), 1, fp_func);
numero=fclose(fp_func);
return 1; //exitoso
}
int lee_formato(persona* persona_func, char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
long numero = 0;
if (fopen_s(&fp_func, filename_func, "r") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
numero = fscanf(fp_func, "%s %d %f", persona_func->nombre, &(persona_func->edad), &(persona_func->altura));
// Imprime el formato leida
printf("\nDentro funcion.");
printf("\nNombre: %s", persona_func->nombre);
printf("\nEdad: %d", persona_func->edad);
printf("\nAltura: %f", persona_func->altura);
numero = fclose(fp_func);
return 1; //exitoso
}
int lee_formato_mult_line(persona* persona_func, char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
int fin_archivo = 0;
long numero = 0;
int contador = 0;
if (fopen_s(&fp_func, filename_func, "r") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
do {
fin_archivo = fscanf(fp_func, "%s %d %f\n", persona_func->nombre, &(persona_func->edad), &(persona_func->altura));
// Imprime el formato leida
printf("\nDentro funcion.");
printf("\nNombre: %s", persona_func->nombre);
printf("\nEdad: %d", persona_func->edad);
printf("\nAltura: %f", persona_func->altura);
} while (fin_archivo!=EOF);
numero = fclose(fp_func);
return 1; //exitoso
}
int lee_estructura(persona *persona_func, char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
long numero = 9;
if (fopen_s(&fp_func, filename_func, "rb") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
numero = fread(persona_func, sizeof(struct persona), 1, fp_func);
// Imprime la estructura leida
/* printf("\nDentro funcion.");
printf("\nNombre: %s", persona_func->nombre);
printf("\nEdad: %d", persona_func->edad);
printf("\nAltura: %f", persona_func->altura);*/
numero = fclose(fp_func);
return 1; //exitoso
}
int lee_estructura_arreglo(persona persona_arreglo[], char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
long numero = 9;
int contador = 0;
if (fopen_s(&fp_func, filename_func, "wb") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
do {
numero = fread(&(persona_arreglo[contador]), sizeof(struct persona), 1, fp_func);
contador++;
} while ((persona_arreglo[contador].nombre[0] != NULL) && (contador < MAX_ELEMT));
numero = fclose(fp_func);
for (contador = 0; contador < MAX_ELEMT; contador++) {
// Imprime la estructura leida
printf("\nDentro funcion.");
printf("\nNombre: %s", persona_arreglo[contador].nombre);
printf("\nEdad: %d", persona_arreglo[contador].edad);
printf("\nAltura: %f", persona_arreglo[contador].altura);
}
return 1; //exitoso
}
int escribir_estructura_arreglo(persona persona_arreglo[], char filename_func[]) {
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se escribio el caracter.
FILE* fp_func;
long numero = 9;
int contador = 0;
if (fopen_s(&fp_func, filename_func, "wb") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
do {
numero = fwrite(&persona_arreglo[contador], sizeof(struct persona), 1, fp_func);
contador++;
printf("%s", persona_arreglo[contador].nombre);
} while((persona_arreglo[contador].nombre[0]!=NULL)&&(contador<MAX_ELEMT));
numero = fclose(fp_func);
return 1; //exitoso
}
int lee_caracter_por_caracter(char filename_func[], int num_car_leer){
// Devuelve
// 0: no pudo abrior el archivo.
// 1: Se leyo el caracter.
char caracter_leido;
FILE* fp_func;
if (fopen_s(&fp_func, filename_func, "r") != 0) {
printf("No se pudo abrir el archivo %s", filename_func);
return 0;
}
printf("\nEl archivo %s esta abierto", filename_func);
// Imprime la tira de caracteres
printf("\n"); //salto de linea
do {
caracter_leido = fgetc(fp_func);
printf("%c", caracter_leido);
num_car_leer--;
} while ((caracter_leido!=EOF)&&(num_car_leer >0));
fclose(fp_func);
return 1;
}
int main()
{
char filename[50]; // nombre del archivo
FILE* fp; //Puntero al controlador
char ch; // Caracter buffers
char str[128];
int opcion = -1;
char caracter='a';
char string[128];
int contador = 0;
persona persona_var;
persona persona_arreglo[MAX_ELEMT] = { {"AAAAA",1,1.1},
{ "BBB",2,2.2 },
{"CCC", 3, 3.1},
{"DDD", 4, 4.1},
{"EEE", 5, 5.1},
{NULL, 0, 0} };
/* strcpy_s(persona_var.nombre, "Juan");
persona_var.edad = 25;
persona_var.altura = 1.75;*/
// printf("Introduzca el nombre del archivo: ");
// scanf_s("%s", filename, sizeof(filename));
do {
printf("\nIntroduzca su opción: ");
printf("\n1-Escribe caracter: ");
printf("\n2-Lee caracter: ");
printf("\n3-Escribe string: ");
printf("\n4-Lee string: ");
printf("\n5.Escribe formato: ");
printf("\n6.Lee Formato: ");
printf("\n7.Escribe Formato Multiples lineas: ");
printf("\n8.Lee Formato Multiples lineas: ");
printf("\n9.Escribe estructura: ");
printf("\n10.Lee estructura: ");
printf("\n11.Escribe estructura con arreglo: ");
printf("\n12.Lee estructura con arreglo: ");
printf("\n0.Salir : ");
printf("\nIntroduzca su opc: ");
// OPcion de inserción 1
// fgets(str, 128, stdin);
// sscanf_s(str, "%d", &opcion);
// Opcion de insercion 2
scanf_s("%d", &opcion);
switch (opcion)
{
case 1:
strcpy(filename, "caracter.txt");
printf("\nArchivo %s",filename);
caracter = 'a';
escribir_caracter_por_caracter(caracter, filename);
break;
case 2:
strcpy(filename, "caracter.txt");
printf("\nArchivo %s", filename);
caracter = lee_caracter_por_caracter(filename, 2);
break;
case 3:
strcpy(filename, "string.txt");
printf("\nArchivo %s", filename);
printf("\nCopie un string:");
scanf("%s", string);
escribir_string(string, filename);
break;
case 4:
strcpy(filename, "string.txt");
leer_string(string, filename);
printf("\n%s", string);
break;
case 5:
strcpy(filename, "formato.txt");
printf("\nArchivo %s", filename);
escribir_formato(&persona_var, filename);
break;
case 6:
strcpy(filename, "formato.txt");
printf("\nArchivo %s", filename);
lee_formato(&persona_var, filename);
break;
case 7:
strcpy(filename, "mult_formato.txt");
printf("\nArchivo %s", filename);
escribir_formato_mult_line(&persona_var, filename);
break;
case 8:
strcpy(filename, "mult_formato.txt");
printf("\nArchivo %s", filename);
lee_formato_mult_line(&persona_var, filename);
break;
case 9:
strcpy(filename, "estructura.dat");
printf("\nArchivo %s", filename);
escribir_estructura(&persona_var, filename);
// Imprime la estructura leida
printf("\nFuera funcion.");
printf("\nNombre: %s", persona_var.nombre);
printf("\nEdad: %d", persona_var.edad);
printf("\nAltura: %f", persona_var.altura);
break;
case 10:
strcpy(filename, "estructura.dat");
printf("\nArchivo %s", filename);
lee_estructura(&persona_var, filename);
// Imprime la estructura leida
printf("\nFuera funcion.");
printf("\nNombre: %s", persona_var.nombre);
printf("\nEdad: %d", persona_var.edad);
printf("\nAltura: %f", persona_var.altura);
break;
case 11:
strcpy(filename, "arreglo_estructura.dat");
printf("\nArchivo %s", filename);
escribir_estructura_arreglo(persona_arreglo, filename);
break;
case 12:
strcpy(filename, "arreglo_estructura.dat");
printf("\nArchivo %s", filename);
lee_estructura_arreglo(persona_arreglo, filename);
break;
default:
break;
}
} while (opcion!=0);
std::cout << "chao bro...\n";
}