How to write a dynamic number of numbers to a binary file in C

2 Answers

0 votes
#include <stdio.h> 
#include <stdarg.h>
#include <stdlib.h> 

int writeToFile(char* filename, int first, ...) {
    FILE* fp = fopen(filename, "wb");

    if (!fp) { fputs("File open error", stderr); return 0; }

    va_list vl;

    va_start(vl, first);
    int n = first;

    while (n != 0) {
        fwrite(&n, sizeof(int), 1, fp);
        n = va_arg(vl, int);
    }

    fclose(fp);
    va_end(vl);

    return 1;
}

int readFile(char* filename) {
    FILE* fp = fopen(filename, "rb");
    if (!fp) { fputs("File open error", stderr); return 0; }
    
    int n;
    while (1) {
        fread(&n, sizeof(int), 1, fp);
        if (feof(fp)) break;
        printf("%d\n", n);
    }

    fclose(fp);

    return 1;
}


int main()
{
    char* filename = "d:\\data.bin";

    writeToFile(filename, 123, 8, 9, 100, 291073, 0);

    readFile(filename);

    return 0;
}



/*

run:

123
8
9
100
291073

*/

 



answered Apr 26, 2024 by avibootz
0 votes
#include <stdio.h> 
#include <stdarg.h>
#include <stdlib.h> 

int writeToFile(char* filename, int totalnumbers, ...) {
    FILE* fp = fopen(filename, "wb");

    if (!fp) { fputs("File open error", stderr); return 0; }

    int n;
    va_list vl;
    va_start(vl, totalnumbers);
    for (int i = 0; i < totalnumbers; i++) {
        n = va_arg(vl, int);
        fwrite(&n, sizeof(int), 1, fp);
    }

    fclose(fp);
    va_end(vl);

    return 1;
}

int readFile(char* filename) {
    FILE* fp = fopen(filename, "rb");
    if (!fp) { fputs("File open error", stderr); return 0; }
    
    int n;
    while (1) {
        fread(&n, sizeof(int), 1, fp);
        if (feof(fp)) break;
        printf("%d\n", n);
    }

    fclose(fp);

    return 1;
}


int main()
{
    char* filename = "d:\\data.bin";

    writeToFile(filename, 6, 123, 8, 9, 100, 291073, 45);

    readFile(filename);

    return 0;
}



/*

run:

123
8
9
100
291073
45

*/

 



answered Apr 26, 2024 by avibootz

Related questions

2 answers 217 views
1 answer 273 views
1 answer 233 views
1 answer 193 views
193 views asked Jul 24, 2015 by avibootz
1 answer 271 views
271 views asked Oct 17, 2014 by avibootz
2 answers 148 views
...