Accueil > > > SERIALISATION/DESERIALISATION D'UNE STRUCTURE
SERIALISATION/DESERIALISATION D'UNE STRUCTURE
Information sur la source
Description
Enfin ! Depuis 3 semaines, je cherchais à écrire une structure dans un fichier binaire. J'ai enfin réussi. Ce code écrit 5 enregistrements dans un fichier binaire, puis les lit, tout simplement ! Il faut passer par la sérialisation/désérialisation. J'ai mis un seul commentaire car je pense que le code est assez clair (?)
Source
- Imports System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- Imports System.IO
-
- Public Module Module1
-
- Dim nom_fichier As String = "test.bin"
-
- <Serializable()> _
- Public structure HighScore
-
- ' attributs
- Private _pseudo As String
- Private _score As Integer
- Private _reussite As Double
- Private _duree_jeu As TimeSpan
-
- ' propriétés
- Public Property pseudo() As String
- Get
- Return _pseudo
- End Get
- Set(ByVal value As String)
- _pseudo = value
- End Set
- End Property
-
- Public Property score() As Integer
- Get
- Return _score
- End Get
- Set(ByVal value As Integer)
- _score = value
- End Set
- End Property
-
- Public Property reussite() As Double
- Get
- Return _reussite
- End Get
- Set(ByVal value As Double)
- _reussite = value
- End Set
- End Property
-
- Public Property duree_jeu() As TimeSpan
- Get
- Return _duree_jeu
- End Get
- Set(ByVal value As TimeSpan)
- _duree_jeu = value
- End Set
- End Property
-
- ' Constructeur
- Public Sub New(ByVal __pseudo As String, ByVal __score As Integer, _
- ByVal __reussite As Double, ByVal __duree_jeu as TimeSpan)
- _pseudo = __pseudo
- _score = __score
- _reussite = __reussite
- _duree_jeu = __duree_jeu
- End Sub
-
- End Structure
-
-
- Public sub Serialize(ByVal struct As HighScore, ByVal fichier As String)
-
- Dim serializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
- New Runtime.Serialization.Formatters.Binary.BinaryFormatter
- Dim stream As FileStream
-
- 'If struct Is Nothing Then Return False
- If Not File.Exists(fichier) Then
- stream = New FileStream(fichier, FileMode.Create)
- Else
- stream = New FileStream(fichier, FileMode.Append)
- End If
-
- serializer.Serialize(stream, struct)
- stream.Close()
-
- End sub
-
-
- Public Function Deserialize(ByVal fichier As String) As Boolean
-
- Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
- New Runtime.Serialization.Formatters.Binary.BinaryFormatter
- Dim stream As FileStream
- Dim result As HighScore
-
- If Not File.Exists(fichier) Then
- return false
- else
- stream = New FileStream(fichier, FileMode.Open)
-
- While True
- Try
- result = deserializer.Deserialize(stream)
- Console.WriteLine("Pseudo : {0}, score : {1} bonnes réponses, reussite : {2}%, temps : {3}.", result.pseudo , result.score, result.reussite, result.duree_jeu)
- stream.Flush
- Catch
- Exit While
- End Try
- End While
-
- stream.Close()
- console.ReadLine
- return true
- End If
-
- End Function
-
- Sub Main()
- ' TimeSpan exprime une durée
- Dim duree As New TimeSpan(1000000000000)
-
- Serialize(New HighScore("Fabien",15,70.5,duree), nom_fichier)
- Serialize(New HighScore("Casy",13,80.33,duree), nom_fichier)
- Serialize(New HighScore("Willy",13,70.67,duree), nom_fichier)
- Serialize(New HighScore("X",11,98.5,duree), nom_fichier)
- Serialize(New HighScore("CharlesRacaud",10, 92.15,duree), nom_fichier)
-
- If not Deserialize(nom_fichier) Then
- Console.WriteLine("Le fichier n'existe pas.")
- End If
-
- End Sub
-
- End Module
Imports System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Imports System.IO
Public Module Module1
Dim nom_fichier As String = "test.bin"
<Serializable()> _
Public structure HighScore
' attributs
Private _pseudo As String
Private _score As Integer
Private _reussite As Double
Private _duree_jeu As TimeSpan
' propriétés
Public Property pseudo() As String
Get
Return _pseudo
End Get
Set(ByVal value As String)
_pseudo = value
End Set
End Property
Public Property score() As Integer
Get
Return _score
End Get
Set(ByVal value As Integer)
_score = value
End Set
End Property
Public Property reussite() As Double
Get
Return _reussite
End Get
Set(ByVal value As Double)
_reussite = value
End Set
End Property
Public Property duree_jeu() As TimeSpan
Get
Return _duree_jeu
End Get
Set(ByVal value As TimeSpan)
_duree_jeu = value
End Set
End Property
' Constructeur
Public Sub New(ByVal __pseudo As String, ByVal __score As Integer, _
ByVal __reussite As Double, ByVal __duree_jeu as TimeSpan)
_pseudo = __pseudo
_score = __score
_reussite = __reussite
_duree_jeu = __duree_jeu
End Sub
End Structure
Public sub Serialize(ByVal struct As HighScore, ByVal fichier As String)
Dim serializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream
'If struct Is Nothing Then Return False
If Not File.Exists(fichier) Then
stream = New FileStream(fichier, FileMode.Create)
Else
stream = New FileStream(fichier, FileMode.Append)
End If
serializer.Serialize(stream, struct)
stream.Close()
End sub
Public Function Deserialize(ByVal fichier As String) As Boolean
Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream
Dim result As HighScore
If Not File.Exists(fichier) Then
return false
else
stream = New FileStream(fichier, FileMode.Open)
While True
Try
result = deserializer.Deserialize(stream)
Console.WriteLine("Pseudo : {0}, score : {1} bonnes réponses, reussite : {2}%, temps : {3}.", result.pseudo , result.score, result.reussite, result.duree_jeu)
stream.Flush
Catch
Exit While
End Try
End While
stream.Close()
console.ReadLine
return true
End If
End Function
Sub Main()
' TimeSpan exprime une durée
Dim duree As New TimeSpan(1000000000000)
Serialize(New HighScore("Fabien",15,70.5,duree), nom_fichier)
Serialize(New HighScore("Casy",13,80.33,duree), nom_fichier)
Serialize(New HighScore("Willy",13,70.67,duree), nom_fichier)
Serialize(New HighScore("X",11,98.5,duree), nom_fichier)
Serialize(New HighScore("CharlesRacaud",10, 92.15,duree), nom_fichier)
If not Deserialize(nom_fichier) Then
Console.WriteLine("Le fichier n'existe pas.")
End If
End Sub
End Module
Conclusion
Bon je ne sais pas parcourir un fichier alors j'ai mis un "Try". En effet, While not (result is nothing) ne marche pas : le compilateur bloque sur le Is.
Pour les newbies, comme moi, pour faire marcher ce programme : 1/Ouvrez un projet vide. 2/Ajouter un fichier vide. 3/Faites un copier-coller de mon code. 4/Lancer la compilation.
n.b.Cet exemple est intéressant car il lit plusieurs enregistrements. Dans tous les exemples/tutos lus, seul un enregistrement était concerné.
J'espère que ce code aidera les débutants comme moi, qui ont galéré pour écrire de simples structures dans un simple fichier binaire. A noter que cet exemple doit aussi marcher pour les objets. Dans ce cas, il faut remplacer le Structure par Class.
Historique
- 12 janvier 2007 13:03:01 :
- J'ai ajouté un membre TimeSpan pour montrer qu'on peut sérialiser/désérialiser autre chose que des nombres et des caractères.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Enregistrement structure dans fichier binaire en .Net [ par Djin2004 ]
Bonjour,Je dispose d'une structure contenant environ 150 variables et j'aimerais savoir s'il est possible en VB.net de l'enregistrer en une seule fois
fichier binaire [ par taghzou ]
salut tous le monde, j'ai un fichier binaire ,mais le probleme j ai pas la structure utilisé comment faire pour generer la structure pour pouvoir
Structure d'un fichier binaire? [ par pinje ]
Bonjour a tous,J'aimerais lire un fichier binaire contenant les resultats d'un calcul, or je ne connais pas a l'avance sa structure... Est ce qu'il es
[vb.net]Fichier binaire et structure [ par spycko ]
Salutj'ai créer une structure (T_FILEHST) qui corespont à la strucure de mon fichier binaireet je voudrez mettre le contenu de mon fichier d
Comparaison entre deux bases de données ayant la même structure [ par lindahaddad ]
Bonjours,J'ai un fichier saisie en CSpro3.3 ( un ensemble de questionnaires (1500 qs) ce fichier peut etre transferer à un fichier texte) je veut fa
Fichier binaire lecture - ecriture avec FileSystem [ par BySnake ]
Bonjour a tous, je recherche actuellement a écrire et lire dans un fichier en mode binaire via ces deux fonctions :My.Computer.FileSystem.WriteAllByte
lire 4 bytes dans un fichier binaire [ par ravachol ]
bonjour a tous,j'ai un fichier binaire ou il y a a l'adresse 0x000E 4 bytes qui donne un entier normalement(voir image)moi je lit le fichier comme ça
Afficher un fichier pdf en passant son binaire [ par tabarrant ]
Salut tous le monde, Voila je vous explique mon problème. On a un serveur avec plein de fichier en pdf; donc on y fait des recherche et importation
binaire, backup, restore, diff [ par ridamaksour ]
Salut tous,J'ai besoin de faire une comparaison binaire entre 2 fichiers, un constituant une copie recente l'autre une copie moins recente.je dois ain
Ecrire dans un fichier binaire de plus de 2 Go [ par youyou40 ]
Bonjour J'écris une petite application qui travaille sur des fichiers pouvant être très gros. J'utilise l'instruction Put pour écrire dans ces fichier
|
Derniers Blogs
PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|