Problème de serialization ! [Résolu]

Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 6 janv. 2011 à 23:18 - Dernière réponse : Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention
- 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
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 6 janv. 2011 à 23:41
3
Merci
Bonjour,

BackupPath.Parametres
est marquée sérialisable ?

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de NHenry
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 6 janv. 2011 à 23:28
0
Merci
On peu sauvegarder un objet mais pas un tableau d'objets avec Serialize ?
Commenter la réponse de Duke49
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 6 janv. 2011 à 23:34
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
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 6 janv. 2011 à 23:37
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
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 6 janv. 2011 à 23:48
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
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 7 janv. 2011 à 01:28
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.