|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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
Sources en rapport avec celle ci
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
Ouvrir fichier en binaire SANS "Open file For Binary" [ par Munkyubi ]
Bonjour tout le monde,Bon alors voilà mon problème est de savoir si en VB6 il existe une méthode pour ouvrir un fichier en Binaire sans utiliser le ba
|
Téléchargements
Logiciels à télécharger sur le même thème :
|