web-dev-qa-db-fra.com

Comment utiliser les fonctions fread et fwrite pour lire et écrire des fichiers binaires?

Salut dans mon projet, je dois lire un fichier .bin qui contient des données de capteur sous la forme de short(16 bit values). Je fais cela en utilisant la fonction fread dans un tampon, mais je pense que la lecture ne se produit pas correctement. Je veux dire il n'y a pas de cohérence entre ce que j'écris et ce que je lis. Pouvez-vous suggérer ce qui ne va pas ici? Ce n'est pas mon code de mon projet ... J'essaie seulement de vérifier les fonctions fread et fwrite ici.

#include<stdio.h>
void main()
{
    FILE *fp = NULL;

    short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
    short result[10];

    fp=fopen("c:\\temp.bin", "wb");

    if(fp != NULL)
    {
        fwrite(x, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
        rewind(fp);
        fread(result, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
    }
    else
        exit(0);

    printf("\nResult");
    printf("\n%d",result[0]);
    printf("\n%d",result[1]);
    printf("\n%d",result[2]);
    printf("\n%d",result[3]);
    printf("\n%d",result[4]);
    printf("\n%d",result[5]);
    printf("\n%d",result[6]);
    printf("\n%d",result[7]);
    printf("\n%d",result[8]);
    printf("\n%d",result[9]);

    fclose(fp)
 }

Après avoir fait le fread () (valeurs HEX):

temp.bin:
01 02 03 04 05 06 e1 8e 88 06 ef bf b6 0b...

Après avoir fait le fwrite ()

stdout:
Result
0
914
-28
-28714
-32557
1
512
-32557
908
914
16
user1190135

Ouvrez le fichier avec le mode w+ (lire et écrire). Le code suivant fonctionne:

#include<stdio.h>
int main()
{
    FILE *fp = NULL;

    short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
    short result[10];
    int i;

    fp=fopen("temp.bin", "w+");

    if(fp != NULL)
    {
        fwrite(x, sizeof(short), 10 /*20/2*/, fp);
        rewind(fp);
        fread(result, sizeof(short), 10 /*20/2*/, fp);
    }
    else
        return 1;

    printf("Result\n");
    for (i = 0; i < 10; i++)
        printf("%d = %d\n", i, (int)result[i]);

    fclose(fp);
    return 0;
}

Avec sortie:

Result
0 = 1
1 = 2
2 = 3
3 = 4
4 = 5
5 = 6
6 = 5000
7 = 6
8 = -10
9 = 11
13
trojanfoe

Lorsque vous avez ouvert le fichier, vous avez oublié d'autoriser la lecture:

fp=fopen("c:\\temp.bin", "wb");

Devrait être:

fp=fopen("c:\\temp.bin", "w+b");
3
Richard J. Ross III