Estructura de lectura/escritura en un archivo en C

Requisito previo: Estructura en C
Para escribir en un archivo, es fácil escribir una string o un int en el archivo usando fprintf y putc , pero es posible que haya tenido dificultades al escribir el contenido de la estructura. fwrite y fread facilitan la tarea cuando desea escribir y leer bloques de datos. 
 

  • fwrite : La siguiente es la declaración de la función fwrite 
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr - This is pointer to array of elements to be written
size -  This is the size in bytes of each element to be written
nmemb - This is the number of elements, each one with a size of size bytes
stream - This is the pointer to a FILE object that specifies an output stream

C

// C program for writing
// struct to file
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// a struct to read and write
struct person
{
    int id;
    char fname[20];
    char lname[20];
};
 
int main ()
{
    FILE *outfile;
     
    // open file for writing
    outfile = fopen ("person.dat", "w");
    if (outfile == NULL)
    {
        fprintf(stderr, "\nError opened file\n");
        exit (1);
    }
 
    struct person input1 = {1, "rohan", "sharma"};
    struct person input2 = {2, "mahendra", "dhoni"};
     
    // write struct to file
    fwrite (&input1, sizeof(struct person), 1, outfile);
    fwrite (&input2, sizeof(struct person), 1, outfile);
     
    if(fwrite != 0)
        printf("contents to file written successfully !\n");
    else
        printf("error writing file !\n");
 
    // close file
    fclose (outfile);
 
    return 0;
}

Producción: 

gcc demowrite.c
./a.out
contents to file written successfully!
  • fread : A continuación se muestra la declaración de la función fread 
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr - This is the pointer to a block of memory with a minimum size of size*nmemb bytes.
size - This is the size in bytes of each element to be read.
nmemb - This is the number of elements, each one with a size of size bytes.
stream - This is the pointer to a FILE object that specifies an input stream.

C

// C program for reading
// struct from a file
#include <stdio.h>
#include <stdlib.h>
 
// struct person with 3 fields
struct person
{
    int id;
    char fname[20];
    char lname[20];
};
 
// Driver program
int main ()
{
    FILE *infile;
    struct person input;
     
    // Open person.dat for reading
    infile = fopen ("person.dat", "r");
    if (infile == NULL)
    {
        fprintf(stderr, "\nError opening file\n");
        exit (1);
    }
     
    // read file contents till end of file
    while(fread(&input, sizeof(struct person), 1, infile))
        printf ("id = %d name = %s %s\n", input.id,
        input.fname, input.lname);
 
    // close file
    fclose (infile);
 
    return 0;
}

Producción: 

gcc demoread.c
./a.out
id = 1   name = rohan sharma
id = 2   name = mahendra dhoni

Este artículo es una contribución de Mandeep Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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