Ejemplo archivos y ficheros

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";
}

Puede que también te guste...

Deja una respuesta

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