Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fread et lecture aléatoire

3 réponses
Avatar
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

3 réponses

Avatar
-ed-
On 1 nov, 00:30, TSalm wrote:

Je rencontre un problème avec la fonction <<fread>> de cstdio



Admettons que tu parles de <cstdio>. Ca n'existe pas en C. Si tu fais
du C++; tu te trompes de forum.

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éato ire.
Mais plutôt qu'une ligne m'est retournée avant une autre.



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++.
Avatar
TSalm
>> Je rencontre un problème avec la fonction <<fread>> de cstdio



Admettons que tu parles de <cstdio>. Ca n'existe pas en C. Si tu fais
du C++; tu te trompes de forum.



Je voulais bien parler de <<fread>> de <<stdio>>. Mes excuses pour cette
erreur.

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.



fread()ne lit pas des 'lignes', mais des blocs de données.



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
:-)

Si le
codage est correct, il ne peut pas y avoir d'inversions. Il faut
évidemment prévoir la place nécessaire à la lecture.



Codage? Tu veux dire le codage du fichier, ou le code du programme ?


Écrit ton code en C pur, car je ne comprends rien au charabia C++.



Intégriste va ;-)
Avatar
TSalm
Le Sun, 01 Nov 2009 14:08:16 +0100, TSalm a écrit:

Je rencontre un problème avec la fonction <<fread>> de cstdio



Admettons que tu parles de <cstdio>. Ca n'existe pas en C. Si tu fais
du C++; tu te trompes de forum.



Je voulais bien parler de <<fread>> de <<stdio>>. Mes excuses pour cette
erreur.

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.



fread()ne lit pas des 'lignes', mais des blocs de données.



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
:-)

Si le
codage est correct, il ne peut pas y avoir d'inversions. Il faut
évidemment prévoir la place nécessaire à la lecture.



Codage? Tu veux dire le codage du fichier, ou le code du programme ?


Écrit ton code en C pur, car je ne comprends rien au charabia C++.



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/