Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2973 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Erreur lors de la lecture de gros fichiers sur réseau local

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur lors de la lecture de gros fichiers sur réseau local

n°2123595
godbeni
Posté le 27-01-2012 à 11:10:19  profilanswer
 

Bonjour à tous,

 


J'ai développé une application qui lit et écrit de gros fichiers binaires en c++ (de l'ordre du go). Lorsque les fichiers lus par mon application sont en local, tout va bien. A l'inverse, lorsque les fichiers lus sont sur une autres machine du réseau local, mon application ne plante pas mais semble "mal lire" les fichiers (des octets différents, ...).

 

J'utilise le code suivant pour initialiser mon flux de lecture:

 

std::ifstream inGraphe(cheminDuFichierSurLeReseau.c_str(), ios::in | ios::binary );

 

Celui-ci est utilisé pour lire des primitives (notamment entiers non signés 32 bits):

 


void lireBinaire(ifstream& in, type_val& v){
    in.read((char*)&v, sizeof(v));
}

 

ainsi que des vecteurs d'objets. Je lis notamment d'une traite un vecteur d'objets sérialisé représentant plus de 99% du volume du fichier, via la méthode:

 

template < typename type_val >
inline void lireSequenceBinaire(ifstream& in, type_val* p_v, size_t nbr_){
     in.read(reinterpret_cast<char*>(p_v), sizeof(type_val)*nbr_);
}

 

D'où peut provenir ce comportement anormal lorsque je lis le fichier sur une machine du réseau local et non sur la machine où s'exécute l'application?

 

Vous remerciant par avance,
Cordialement.


Message édité par godbeni le 27-01-2012 à 11:19:23
mood
Publicité
Posté le 27-01-2012 à 11:10:19  profilanswer
 

n°2123600
gilou
Modérateur
Modzilla
Posté le 27-01-2012 à 11:19:49  profilanswer
 

Citation :

mon application ne plante pas mais semble "mal lire" les fichiers

Machines avec une architecture différente, problème d'endianness probablement.
http://fr.wikipedia.org/wiki/Endianness
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2123625
godbeni
Posté le 27-01-2012 à 12:30:03  profilanswer
 

gilou a écrit :

Citation :

mon application ne plante pas mais semble "mal lire" les fichiers

Machines avec une architecture différente, problème d'endianness probablement.
http://fr.wikipedia.org/wiki/Endianness
A+,


Non, little-endian sur les deux machines et si je rapatrie le fichier en local, tout se passe bien. Globalement, l'ensemble des octets lus est cohérent mais certains sont erronés (L'en-tête consistant en des entiers non signés /le 32 bits (donc soumis à l'endianess) est bien lue).


Message édité par godbeni le 27-01-2012 à 12:32:01
n°2123644
snafu8
Posté le 27-01-2012 à 13:46:32  profilanswer
 

quel système sur les deux machines, 32 ou 64 bits?
 

Code :
  1. template < typename type_val >
  2. inline void lireSequenceBinaire(ifstream& in, type_val* p_v, size_t nbr_){
  3.      in.read(reinterpret_cast<char*>(p_v), sizeof(type_val)*nbr_);


 
sizeof(type_val) ne vaut pas forcément la même chose partout. genre un long fera 4 octets sous win32, win64 et mac os 32 mais fera 8 octets sous mac os 64.

n°2123671
gilou
Modérateur
Modzilla
Posté le 27-01-2012 à 14:58:31  profilanswer
 

Citation :

Non, little-endian sur les deux machines et si je rapatrie le fichier en local, tout se passe bien.

Dans les deux cas, c'est la même machine qui mit un même fichier, et s'il est en local, ça colle, et s'il est distant, ça merde? c'est bien ça?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2124057
godbeni
Posté le 31-01-2012 à 09:10:58  profilanswer
 

gilou a écrit :

Citation :

Non, little-endian sur les deux machines et si je rapatrie le fichier en local, tout se passe bien.

Dans les deux cas, c'est la même machine qui mit un même fichier, et s'il est en local, ça colle, et s'il est distant, ça merde? c'est bien ça?
A+,


 
oui exactement.

n°2124125
gilou
Modérateur
Modzilla
Posté le 31-01-2012 à 13:14:27  profilanswer
 

Si tu compares un fichier envoyé à un fichier reçu, les erreurs commencent toujours a peu près au bout du même nb d'octets?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Erreur lors de la lecture de gros fichiers sur réseau local

 

Sujets relatifs
Lecture sur un port réseauapplication réseau avec le protocole SNMP
Erreur du système d'exploitation 3(Le chemin d'accès spécifié est intrURL Rewriting en local
erreur installation SDK pour windows 7erreur besoin d'aide
[C] problème de fichiersEnvoi de fichiers dans la zone privée d'un site, confidentialité ?
Problème de lecture d'un fichier avec fread 
Plus de sujets relatifs à : Erreur lors de la lecture de gros fichiers sur réseau local


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR