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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
-ed-
Le #20464381
On 1 nov, 00:30, 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 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++.
TSalm
Le #20465411
>> 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 ;-)
TSalm
Le #20468151
Le Sun, 01 Nov 2009 14:08:16 +0100, 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 ;-)




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/
Publicité
Poster une réponse
Anonyme