Serialization : une methode pour stocker des données

Soyez le premier à donner votre avis sur cette source.

Vue 14 707 fois - Téléchargée 1 160 fois

Description

Voici une méthode appelée Serialization qui permet de stocker des données. Ce code permet de sauvegarder sous forme de fichier Binaire. Il existe cependant d'autres méthodes pour sauvegarder sous forme de fichier XML par exemple.

Ce code est tres simple, et bien commenté je pense.

Attention, le dossier du projet est appelé ProjetTCP !! Ne pas s'y fier, c'est une erreur de ma part. Il suffit simplement d'ouvrir le fichier Projet nommé : "ProjetSerializer"

Voila.

Source / Exemple :


'Programme de Alexandre Scellier
'Aide avec MSDN Dot Net.

'Import des ressources nécéssaires à la sérialisation(1) et à la création de fichiers(2)
Imports System.Windows.Forms
Imports System.IO '-> (2)
Imports System.Runtime.Serialization.Formatters.Binary '-> (1)

Public Class Client

    'Pour un accès à la fonction de création d'un fichier "Compta.Bin" dans le projet entier,
    'Il est plus pratique de créer une procédure accessible depuis tout le Module en cours
    'Ce qui permet que lorsqu'une erreur est produite de recreer un fichier sans erreur :
    'Une déclaration de type Public est interdite dans une procédure.
    Private Sub CreateFile()
        myFileStream = File.Create("c:\Compta.bin")
    End Sub

    'Ajout d'un objet à la classe Compta :
    Private NewValue As New ValueToSerialize

    'Déclaration des variables qui serviront à la sérialisation :
    'Cette variable est nécéssaire pour la création du fichier de stockage
    'de la Sérialisation
    Public myFileStream As Stream = Nothing

    'Procédure de sérialisation :
    Private Sub Client_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Stockage de deux valeurs à la classe Compta :
        NewValue.Stock1 = "Vive"
        NewValue.Stock2 = "Code Source"

        On Error GoTo BlocErreur

Début:

        CreateFile() 'Appel de la fonction de création de fichiers

        Dim serializer As New BinaryFormatter 'Création d'un objet de la classe Serialize
        serializer.Serialize(myFileStream, NewValue) 'Sérialisation des données
        myFileStream.Close() 'Fermeture du Fichier
        GoTo Fin

        'Bloc de gestion des erreurs évantuelles :
        'Il survient une erreur si le fichier existe deja, donc, on le supprime :
BlocErreur:

        MsgBox("Une erreur est survenue, le programme tente de remedier au problème...")

        If File.GetAttributes("c:\Compta.bin") = FileAttributes.ReadOnly Then

            System.IO.File.Delete("c:\Compta.bin")

        Else

            MsgBox("Le fichier ne prend pas en charge l'ecriture dans celui ci.")
            MsgBox("Le programme va se fermer...")
            End

        End If

        MsgBox("Le programme tente d'acceder à nouveau au fichier...")
        GoTo Début

Fin:
        'Inutile de préciser :p ...
        MsgBox("Exportation Réussie")

    End Sub

    'Procédure de DEserialisation :
    Private Sub Cmd_Recuperer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Recuperer.Click

        'Création d'une nouvelle classe pour stocker les données
        Dim NewValue As New ValueToSerialize

        'Test de l'existence du Fichier :
        If File.Exists("c:\Compta.bin") Then

            'Création d'un StreamFile :
            Dim myFileStream As Stream = File.OpenRead("c:\Compta.bin")

            'Appel de la classe DEserialisationn :
            Dim deserializer As New BinaryFormatter()

            'Recupération des Données :
            NewValue = CType(deserializer.Deserialize(myFileStream), ValueToSerialize)

            'Affichage des données dans une TextBox :
            TextBox1.Text = NewValue.Stock1 & " " & NewValue.Stock2

            'Fermeture du Fichier
            myFileStream.Close()

        End If

    End Sub

    Private Sub Cmd_Quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Quitter.Click
        End
    End Sub

End Class

'ATTENTION : Les Classes crées doivent figurer en bas du projet. La classe de la Form
'Doit toujours être en entête du projet.
'Ici, on cree une Classe Compta contenant deux Valeurs qui seront serialisées :
<System.Serializable()> Public Class ValueToSerialize
    Friend Stock1 As String
    Friend Stock2 As String
End Class

Conclusion :


Attention, le dossier du projet est appelé ProjetTCP !! Ne pas s'y fier, c'est une erreur de ma part. Il suffit simplement d'ouvrir le fichier Projet nommé : "ProjetSerializer"

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011

"tu peux tout sérialiser dans un seul fichier"
oui lol merci j'ai deja faitde la serialization pas mal de fois sur des collection des dictionnary ect ...

"il suffit de convertir correctement tes photos dans les objets et ensuite de sérializer le tout."
ca n'a pas de sens proprement dit car c'est le framework qui via l'interface iserializable et iserializaton serialize ce qu'il veux

donc je repose la question ^^
quand veux serializé une image faut le faire a la mimine en crééant des objet qui contienne tte les info avec implementation des interface que j'ai cité au dessus (comme fait dans la source que j'ai cité) ou est ce qu'il le fait tout seul

"je l'ai fait pour un prog de dessins."
URL ? ^^
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
tu peux tout sérialiser dans un seul fichier, il suffit de convertir correctement tes photos dans les objets et ensuite de sérializer le tout. je l'ai fait pour un prog de dessins.
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
9 mars 2011

le code est a nettoyé frachement pour la serialization ^^
ca fait un peu barbare, c'est pas tout a fait comme c qu'il faut "entammer" la serialzation.
ca marche certe mais c'est pas trop la methode a utiliser je dirais
je vais essayé de t'en retrouvé un propre qui permet en plus de spécialiser la serialization :
http://www.csharpfr.com/codes/SERIALISATION-XML-DICTIONARY_40912.aspx
(le vb.net etant exactement pareil que le C# et le niveau etant simple pas d'excuse de comprehension a la lecture)

cela dit je voudrais savoir si t'as deja essayé de serializer des objet de type image (system.drawig.image) pour savoir si a un moyen de forcer a serialiser les données "brut" de l'image pour vraiment integré l'image au fichier afin d epas se trimballé avec n+1 fichier (n image + le fichier serialiser)
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
ah ok
Messages postés
6
Date d'inscription
dimanche 12 février 2006
Statut
Membre
Dernière intervention
4 mars 2006

Je dis orienté objet car dans mon programme que je développe en ce moment, j'utilise la programmation objet... j'ai completement modifié ce code.. celui présent sur code-source me permet de partager la méthode.. l'intégration efficasse de la serialization dans les projets ne peut se limitter à ce bout de code.

Alex.
Afficher les 16 commentaires

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.