Problème de serialization ! [Résolu]

Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
- - Dernière réponse : Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
- 7 janv. 2011 à 01:28
salut !

J'ai une class qui aura pour objectif d'enregistrer dans un fichier binaire (stream) des variables et leurs valeures. Une sorte de fichier amélioré.
Si vous pouviez me donner un sens meilleur de l'organisation et du codage à ce niveau ce serait super sympa ^^

voici mon code non fonctionnel: (plante à BPEntry(BPEntry.Length - 1).Nom = NomVariable) :
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO

Public Class clsSauvegarde
    Shared CheminFichierParam As String = "Parametres.bin"
    <Serializable()> _
    Public Class BackupPath
        Public BPEntry() As BackupPath

        Public Nom As String
        Public Chemin As String
        Public Attribut As FileAttribute
        Sub New()
            BPEntry = Nothing
        End Sub
        Sub New(ByVal NomVariable As String, ByVal Chemin As String)
            If BPEntry Is Nothing Then
                ReDim BPEntry(0)
            Else
                ReDim Preserve BPEntry(BPEntry.Length)
            End If
            BPEntry(BPEntry.Length - 1).Nom = NomVariable
            BPEntry(BPEntry.Length - 1).Chemin = Chemin
            BPEntry(BPEntry.Length - 1).Attribut = New IO.DirectoryInfo(Chemin).Attributes
        End Sub
    End Class

    Shared Sub SavePath(ByVal NomVariable As String, ByVal Chemin As String)
        Dim NewEntry As New BackupPath(NomVariable, Chemin)
        Dim FluxDeFichier As FileStream = File.Create(CheminFichierParam)
        Dim Serialiseur As New BinaryFormatter
        Serialiseur.Serialize(FluxDeFichier, NewEntry)
        FluxDeFichier.Close()
    End Sub

    Shared Function GetPaths() As BackupPath
        If File.Exists(CheminFichierParam) Then
            Dim CurEntry As New BackupPath
            Dim FluxDeFichier As Stream = File.OpenRead(CheminFichierParam)
            Dim Deserialiseur As New BinaryFormatter()
            CurEntry = CType(Deserialiseur.Deserialize(FluxDeFichier), BackupPath)
            FluxDeFichier.Close()
            Return CurEntry
        End If
        Return Nothing
    End Function

End Class

Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
14321
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
13 décembre 2018
3
Merci
Bonjour,

BackupPath.Parametres
est marquée sérialisable ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
On peu sauvegarder un objet mais pas un tableau d'objets avec Serialize ?
Commenter la réponse de Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Erreur bizzard:


Voici le code pour le faire fonctionner:
    Public Sub ApercuPublication()
        clsSauvegarde.AddPath("AppExe", Application.ExecutablePath)
        clsSauvegarde.AddPath("AppPath", Application.StartupPath)
        clsSauvegarde.SavePath()
        Dim myPaths() As clsSauvegarde.BackupPath.Parametres = clsSauvegarde.GetPaths
    End Sub


Voici le code de la class:
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO

Public Class clsSauvegarde
    Shared CheminFichierParam As String = "Parametres.bin"

    <Serializable()> _
    Public Class BackupPath
        Public Shared myBackupPath() As BackupPath.Parametres

        Public Structure Parametres
            Public Nom As String
            Public Chemin As String
            Public Attribut As FileAttribute
        End Structure
        Sub New()

        End Sub
        Sub New(ByVal NomVariable As String, ByVal Chemin As String)
            If myBackupPath Is Nothing Then
                ReDim myBackupPath(0)
            Else
                ReDim Preserve myBackupPath(myBackupPath.Length)
            End If
            myBackupPath(myBackupPath.Length - 1).Nom = NomVariable
            myBackupPath(myBackupPath.Length - 1).Chemin = Chemin
            myBackupPath(myBackupPath.Length - 1).Attribut = New IO.DirectoryInfo(Chemin).Attributes
        End Sub
    End Class

    Shared Sub AddPath(ByVal NomVariable As String, ByVal Chemin As String)
        Dim NewEntry As New BackupPath(NomVariable, Chemin)
    End Sub

    Shared Sub SavePath()
        Dim FluxDeFichier As FileStream = File.Create(CheminFichierParam)
        Dim Serialiseur As New BinaryFormatter
        Serialiseur.Serialize(FluxDeFichier, BackupPath.myBackupPath)
        FluxDeFichier.Close()
    End Sub

    Shared Function GetPaths() As BackupPath.Parametres()
        If File.Exists(CheminFichierParam) Then
            Dim FluxDeFichier As Stream = File.OpenRead(CheminFichierParam)
            Dim Deserialiseur As New BinaryFormatter()
            BackupPath.myBackupPath = CType(Deserialiseur.Deserialize(FluxDeFichier), BackupPath.Parametres())
            FluxDeFichier.Close()
            Return BackupPath.myBackupPath
        End If
        Return Nothing
    End Function

End Class
Commenter la réponse de Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Sa veux dire quoi ça ???

Le type 'Projet.clsSauvegarde+BackupPath+Parametres' dans l'assembly 'Projet, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' n'est pas marqué comme sérialisable.
Commenter la réponse de Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Tu m'as manqué Henry !!!
Merci ^^ ta raison, une structure peut être sérializable !

Je perfectionne ma class, ensuite je pond une source partageable, ensuite je repost un message ici avec le lien de ma source pour faire suivre cette merveilleuse découverte !!!

Le .ini version stream ^^
Bonne année et bonne santé mon ami !
Commenter la réponse de Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Chose dite, chose faite ^^
Pour ceux qui veulent apprendre la sérialization en vb.net, lookez ici:

http://www.vbfrance.com/codes/VB-NET-METHODE-SAUVEGARDE-SERIALIZATION_52697.aspx
Commenter la réponse de Duke49

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.