Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionOption Strict On Imports System Imports System.IO Imports System.Runtime.Serialization.Formatters.Binary Imports System.Collections.Generic <Serializable()> Public Class cls_table Public lignes As New List(Of cls_ligne) '---------------------------------------------------------------------- ' Sub qui sérialise et trie la class Class puis l'enregistre en binaire dans le fichier passé en paramétre '---------------------------------------------------------------------- Public Sub save(ByVal fichier As String) If fichier = String.Empty Then Exit Sub 'quit la sub si aucun fichier ouvert avant la fermeture. Dim myFileStream As Stream = Nothing Try myFileStream = File.Create(fichier) ' création d'un nouveau fichier à chaque sauvegarde Dim serializer As New BinaryFormatter serializer.Serialize(myFileStream, Me) myFileStream.Close() Catch e As DirectoryNotFoundException Affiche_erreur("Répertoire introuvable, vérifier la présence du disque amovible si vous en utilisez un", e.Message) Catch e As FileNotFoundException ' n'arrive jamais car file create à chaque appel de SAve Affiche_erreur("Fichier introuvable, vérifier la présence du disque amovible si vous en utilisez un", e.Message) 'Catch e As FileLoadException Catch e As Exception Affiche_erreur("erreur d'accés au fichier, Ex : Lecture seul", e.Message) Finally If Not myFileStream Is Nothing Then myFileStream.Close() End Try End Sub ' '---------------------------------------------------------------------- ' fonction qui lit le fichier sérialisé de la class '---------------------------------------------------------------------- Public Function load(ByVal fichier As String) As Boolean Dim myFileStream As Stream = Nothing Try myFileStream = File.OpenRead(fichier) Dim deserializer As New BinaryFormatter() Dim lecture As New cls_table lecture = CType(deserializer.Deserialize(myFileStream), cls_table) myFileStream.Close() ' attribut la liste des lignes à me Me.lignes = lecture.lignes Return True Catch e As Exception Affiche_erreur("erreur d'accés au fichier", e.Message) Return False Finally If Not myFileStream Is Nothing Then myFileStream.Close() End Try End Function ' '---------------------------------------------------------------------- 'affiche les erreurs de fichier dans les sub Save et Load '---------------------------------------------------------------------- Private Sub Affiche_erreur(ByVal HelpMsg As String, ByVal ErMsg As String) MessageBox.Show(HelpMsg _ & Environment.NewLine & ErMsg, "Erreur critique !" _ , MessageBoxButtons.OK, MessageBoxIcon.Error) End Sub End Class
Option Explicit On Option Strict On Imports System Imports System.IO Imports System.Runtime.Serialization.Formatters.Binary Imports System.Collections.Generic <Serializable()> Public Class cls_ligne Public x, y, z As Double Public id As String ' identifiant unique de la ligne (si besoin de rechercher une ligne) Public t As DateTime ' déclare la date pour l'affichage voir ici http://msdn.microsoft.com/fr-fr/library/zdtaw1bw(VS.95).aspx '---------------------------------------------------------------------- ' Création d'une nouvelle ligne de coordonnées, soit vierge, soit avec valeurs '---------------------------------------------------------------------- Public Sub New() 'créé un numéro unique pour chaque ligne (si besoin) id = System.Guid.NewGuid.ToString End Sub Public Sub New(ByVal _x As Double, _ ByVal _y As Double, _ ByVal _z As Double, _ ByVal _t As Date) 'créé un numéro unique pour chaque ligne (si besoin) id = System.Guid.NewGuid.ToString x = _x y = _y z = _z t = _t End Sub ' '---------------------------------------------------------------------- ' renvoie une ligne compléte formatée pour une listview '---------------------------------------------------------------------- Public Function ToListView() As ListViewItem 'déclare et intancie une nouvelle ligne de listview Dim listItem As ListViewItem = New ListViewItem With listItem 'permet d'avoir plusieurs couleurs sur une même ligne de listview .UseItemStyleForSubItems = False 'index de ligne (GUID) .Text = Me.id 'formate l'affichage de la date .SubItems.Add(Me.x.ToString) .SubItems.Add(Me.y.ToString) .SubItems.Add(Me.z.ToString) .SubItems.Add(Me.t.ToString("mm:ss:ff")) '(pour le choix d'affichage voir ici : http://msdn.microsoft.com/fr-fr/library/zdtaw1bw(VS.95).aspx) End With Return listItem End Function ' '---------------------------------------------------------------------- ' renvoie une ligne compléte pour un fichier CSV '---------------------------------------------------------------------- Public Function ToCsv() As String '"date;x;y;z" 'un stringBuilder consomme bien moins de ressource lors d'ajout de texte comme ICI : Dim MyStringBuilder As New Text.StringBuilder(Me.t.ToString("dd/MM/yy") & ";") MyStringBuilder.Append(Me.x & ";") MyStringBuilder.Append(Me.y & ";") MyStringBuilder.Append(Me.z & ";") MyStringBuilder.Append(Environment.NewLine) ToCsv = MyStringBuilder.ToString End Function End Class