Lire/Ecrire une structure dans un fichier [Résolu]

_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 28 déc. 2006 à 12:52 - Dernière réponse : _Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention
- 12 janv. 2007 à 11:46
Bonjour,

je souhaite écrire une structure dans fichier binaire, mais je n'y arrive pas. Après 1h30 de recherche, je pense que VB.Net n'accepte que d'écrire des variables de typologie simple (entier, charactère, etc.).

Voilà ma structure :

Structure HighScore
    ' attributs
    Private _pseudo As String
    Private _score As Integer
    Private _reussite As Double
    Private _duree_jeu As TimeSpan

    'propriétés
(...)
end structure

Dans un programme, j'ai fait :

hs = New HighScore ("toto", nb_reponsesOK, _
                    math.Round (nb_reponsesOK/nb_questions*100, 2), _
                    duree)



f2_HS = New BinaryWriter (File.OpenWrite (nom_f_HS))



f2_HS.Write (hs)
(Plante ici. Normal car dans l'aide  du SDK, n'accepte que des données simples)


Je regrette le C où c'était plus simple :
frwite (f, sizeof(hs),1,etc.)
Afficher la suite 

9 réponses

Répondre au sujet
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 12 janv. 2007 à 11:46
+3
Utile
Rhhoo la gaffe !

Voici la bonne adresse :
http://www.vbfrance.com/codes/SERIALISATION-DESERIALISATION-STRUCTURE_41077.aspx
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 28 déc. 2006 à 13:08
0
Utile
   f2_HS.Write (hs.pseudo) Marche
   f2_HS.Write (hs.score) Marche
   f2_HS.Write (hs.reussite) Marche
   f2_HS.Write (hs.duree_jeu) Marche pas car write n'accepte pas les timespan

Boh, boh, boh !

Vais dormir ! Le sommeil porte conseil.
Commenter la réponse de _Fabien
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 28 déc. 2006 à 13:51
0
Utile
En fait , il ne faut pas écrire directement les données en binaires, mais il faut utiliser les methodes de sérialisation des objets.

Donc tu supprime les 2 dernières lignes avec f2_HS.
Tu rajoute l'import Imports System.Runtime.Serialization.Formatters.Binary

Et tu utilise ce code :

Dim f2_HS As Stream = File.OpenWrite(nom_f_HS)
Dim serializer As New BinaryFormatter

serializer.Serialize(f2_HS, hs)
f2_HS.Close()

Pour lire, c'est l'inverse, il faut désérialiser :

hs = serializer.Deserialize(f2_HS)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 28 déc. 2006 à 16:46
0
Utile
Mmh bon ca, je connaissais pas, ca devrait marcher aussi pour envoyer des objets par réseau comme qqun le demandait récemment non ?

Julien.
Commenter la réponse de Julien237
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 28 déc. 2006 à 17:02
0
Utile
A priori on peut enregistrer un objet dans un fichier, on doit bien pouvoir l'envoyer sur le réseau.
A partir du moment ou on peux ouvrir un Stream, on peut envoyer l'objet. Faut voir si on peut ouvrir un Stream sur le réseau

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 29 déc. 2006 à 12:33
0
Utile
Merci, ça marche presque . La compil est parfaite et le résultat, c'est presque çà . A coup sûr, c'est dans mon code .

Je suis dans le SDK en train d'en savoir plus sur la technique que tu m'as dit .

Tu devines que dans mon fichier de High-scores, y aura plusieurs enregistrements et de taille différente. Le but est de mettre tous les high-scores dans un tableau, de les trier en fonction du score et d'écraser l'ancien fichier des hScore par le nouveau. Puis mettre tout çà dans une fenêtre modale. Mais ça je sais faire. Juste la manip de lecture/écriture/parcourir un fichier que je dois étudier.

En tout cas, merci. Je devrais m'en sortir maintenant.
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 2 janv. 2007 à 14:15
0
Utile
En fait ça marche pas. A la compil, c'est OK. A l'exécution :
serializer.Serialize(f2_HS, hs) plante.
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 11 janv. 2007 à 12:04
0
Utile
J'ai trouvé un tuto exclusivement réservé à la (dé)sérialisation pour SOAP, XML et les flux binaires avec des sources à la clé. Je vais peut-être avancé ?
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 12 janv. 2007 à 11:42
0
Utile
Ça y est ! J'ai réussi ! J'ai mis mon code source à la disposition des utilisateurs :



http://www.vbfrance.com/ajoutcode.aspx?ID=41077
Commenter la réponse de _Fabien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.