Problème de serialization !

Résolu
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 6 janv. 2011 à 23:18
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 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

6 réponses

NHenry Messages postés 15083 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 septembre 2023 159
6 janv. 2011 à 23:41
Bonjour,

BackupPath.Parametres
est marquée sérialisable ?

3
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
6 janv. 2011 à 23:28
On peu sauvegarder un objet mais pas un tableau d'objets avec Serialize ?
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
6 janv. 2011 à 23:34
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
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
6 janv. 2011 à 23:37
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
6 janv. 2011 à 23:48
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 !
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
7 janv. 2011 à 01:28
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
0
Rejoignez-nous