Option 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
tiens essaye de comprendre ce code il te rendra bien service, PCPT m'a aidé là dessus, à mon tour de rendre ce service ;)