fread et lecture aléatoire
Le
TSalm

Bonjour,
Je rencontre un problème avec la fonction <<fread>> de cstdio ( size_t
fread ( void * ptr, size_t size, size_t count, FILE * stream ); ).
Je lis un fichier plutôt volumineux (~500Mo) avec cette fonction. Et il
semble que l'ordre des données retournées sont aléatoire.
Je veux dire par là, non pas que les données ont des valeurs aléatoire.
Mais plutôt qu'une ligne m'est retournée avant une autre.
Est-ce que ce genre de problème interpel quelqu'un parce que moi, je vois
pas . . .
Voici la fonction de lecture de mon code ci-dessous.
Petite remarque : ne faites pas attention aux petits bouts de C++. Le
problème vient à priori d'une fonction C. C'est pourquoi je poste sur ce
forum.
/*-*/
template<class T>
bool SDbFile<T>::read(T& el)
{
size_t sz_read = fread( &el , sizeof(T) , 1 , file ) ;
if ( feof(file) )
return false;
if (sz_read != 1)
{
throw Exception( __FILE__,__LINE__ , "Error while reading file '%s'
: sz_read=%i", _path->c_str(),sz_read );
}
return true;
}
/*-*/
D'avance merci pour votre aide.
-TSalm
Je rencontre un problème avec la fonction <<fread>> de cstdio ( size_t
fread ( void * ptr, size_t size, size_t count, FILE * stream ); ).
Je lis un fichier plutôt volumineux (~500Mo) avec cette fonction. Et il
semble que l'ordre des données retournées sont aléatoire.
Je veux dire par là, non pas que les données ont des valeurs aléatoire.
Mais plutôt qu'une ligne m'est retournée avant une autre.
Est-ce que ce genre de problème interpel quelqu'un parce que moi, je vois
pas . . .
Voici la fonction de lecture de mon code ci-dessous.
Petite remarque : ne faites pas attention aux petits bouts de C++. Le
problème vient à priori d'une fonction C. C'est pourquoi je poste sur ce
forum.
/*-*/
template<class T>
bool SDbFile<T>::read(T& el)
{
size_t sz_read = fread( &el , sizeof(T) , 1 , file ) ;
if ( feof(file) )
return false;
if (sz_read != 1)
{
throw Exception( __FILE__,__LINE__ , "Error while reading file '%s'
: sz_read=%i", _path->c_str(),sz_read );
}
return true;
}
/*-*/
D'avance merci pour votre aide.
-TSalm
Admettons que tu parles de <cstdio>. Ca n'existe pas en C. Si tu fais
du C++; tu te trompes de forum.
fread()ne lit pas des 'lignes', mais des blocs de données. Si le
codage est correct, il ne peut pas y avoir d'inversions. Il faut
évidemment prévoir la place nécessaire à la lecture.
Écrit ton code en C pur, car je ne comprends rien au charabia C++.
Je voulais bien parler de <<fread>> de <<stdio>>. Mes excuses pour cette
erreur.
Oui. Encore une mauvaise sémantique de ma part. Pour ma défense,
spécifiquement, ces blocs représentent en fait des lignes de taille fixe
:-)
Codage? Tu veux dire le codage du fichier, ou le code du programme ?
Intégriste va ;-)
C'est effectivement un problème dans le code.
Merci pour ta réponse.
--
Utilisant le client e-mail révolutionnaire d'Opera :
http://www.opera.com/mail/