Pb avec la fonction fread et la concatenation de fichiers bmp

Signaler
Messages postés
56
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
5 décembre 2005
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Bonjour,

j'ai un pb avec la fonction fread avec le code suivant:

tailleFichier = (donneesFichier.nFileSizeHigh)*MAXDWORD+(donneesFichier.nFileSizeLow); // taille du fichier bmp à lire récupérée suite à l'utilisation de la fonction FindFirstFile ou FindNextFile.

data = (BYTE*)malloc( sizeof(tailleFichier) );

// Lecture des données du fichier
lg = fread( &data, sizeof(BYTE*), tailleFichier, fichierEntree );
if ( ferror( fichierEntree ) != 0 )
{
printf( "une erreur est survenue dans la lecture du fichier\n" );
exit( 0 );
}

Cela me retourne à chaque fois que "une erreur est survenue dans la lecture du fichier" et je ne comprends pas pourquoi. Y a t il une taille limite de lecture d'octets à la fois pour les stocker dans le buffer ?

En fait, c'est pour réaliser la concaténation des données contenues dans plusieurs bmp.
Pour chaque fichier bmp contenu dans un répertoire donné, je lis le fichier en entier, je stocke les données dans un buffer et j'ecris le contenu du buffer dans un fichier. Je concatene ainsi les données de chaque fichier.

Quand je demande à la fonction de lire les données du fichier 32 par 32, la fonction marche mais le fichier résultat ne contient pas exactement les données du fichier.

Comment puis je faire ?

Merci d'avance pour votre aide.

Cako19

2 réponses

Messages postés
56
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
5 décembre 2005

Même si je prends les octets du fichier 1 par 1, j'ai l'impression que ça n'écrit pas les bonnes données sur le fichier résultat :sad)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
lorsque tu fais :
lg = fread( &data, sizeof(BYTE*), tailleFichier, fichierEntree );

tu lit "tailleFichier" élément de taille "sizeof(BYTE*)" à savoir 4 (la taille d'un pinteur).
tu essaye donc de lire 4 fois la taille du fichier.
Ensuite, le premier pramètre est l'adresse du premier octet du buffer où mettre les données lues. Il faut donc passer data et non pas &data.

l'appel à faire est donc :
lg = fread(data, sizeof(BYTE), tailleFichier, fichierEntree );

l'allocation mémoire du buffer n'est pas bonne non plus car sizeof(tailleFichier) va te donner la taille de la variable contenant la taille du fichier à savoir 4 octets pour les entiers 32 bits.

pour alouer le buffer, il faut simplement faire:
BYTE* data = (BYTE*)malloc(tailleFichier);

en ce qui concerne la taille du fichier, c'est pas la peine de prendre les 32 bits de poids fort qui sont nuls sauf pour les fichier > 4GO. Et dans ce cas, tu pourra lire le fichier en entier dans la mémoire.