Pb avec la fonction fread et la concatenation de fichiers bmp

cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005 - 8 avril 2004 à 13:41
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 8 avril 2004 à 16:19
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

cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
8 avril 2004 à 14:17
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)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
8 avril 2004 à 16:19
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.
0
Rejoignez-nous