Pb avec la fonction fread et la concatenation de fichiers bmp
cs_Cako19
Messages postés56Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 5 décembre 2005
-
8 avril 2004 à 13:41
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDerniè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
A voir également:
Pb avec la fonction fread et la concatenation de fichiers bmp
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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.