sehr geehrtes forum team!
ich hab ein kleines programm geschrieben für die Schule in Visual Studio 2005, vb. im moment arbeite ich an einer erweiterung, nämlich dass man sich seinen eigenen stundenplan abspeichern kann. den stundenplan speichere ich in ein zweidimensionales array, also:
Dim user_stdplan(5, 10) As String
5 für die wochentage, und jeweils 10 stunden für jeden tag.
jetzt würde ich gern dieses array weiterhin verfügbar machen, auch wenn die anwendung beendet wurde. ich hab schon einiges ausprobiert, zb mit savesetting usw, aber ich bin nie zu einem zufriedenstellenden ergebnis gekommen. nun bin ich auf dieser seite unter tipps und tricks fündig geworden, allerdings schaffe ich es einfach nicht auf mein programm umzuändern. (der Artikel: http://www.vbarchiv.net/archiv/tipp_details.php?pid=1749)
dazu hab ich in den code von meinem form:
Public Class Serializer
Public Shared Sub Serialize(Of T)(ByVal compression As Boolean, _
ByVal path As String, ByVal instance As T)
Try
Dim fs As Stream = New FileStream(path, FileMode.OpenOrCreate)
Dim bf As New BinaryFormatter
If compression Then fs = New GZipStream(fs, _
CompressionMode.Compress)
bf.Serialize(fs, instance)
fs.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, Application.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Public Shared Sub Serialize(Of T)(ByVal path As String, ByVal instance As T)
Serialize(False, path, instance)
End Sub
Public Shared Function DeSerialize(Of T)(ByVal compression As Boolean, _
ByVal path As String, ByVal defaultInstance As T) As T
Try
If Not File.Exists(path) Then
Return defaultInstance
End If
Dim fs As Stream = New FileStream(path, FileMode.OpenOrCreate)
Dim bf As New BinaryFormatter
If compression Then fs = New GZipStream(fs, _
CompressionMode.Decompress)
DeSerialize = CType(bf.Deserialize(fs), T)
fs.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, Application.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Function
Public Shared Function DeSerialize(Of T)(ByVal path As String, _
ByVal defaultInstance As T) As T
Return DeSerialize(Of T)(False, path, defaultInstance)
End Function
Public Shared Function DeSerialize(Of T As New)(ByVal path As String) As T
Return DeSerialize(Of T)(path, New T)
End Function
Public Shared Function DeSerialize(Of T As New)( _
ByVal compression As Boolean, ByVal path As String) As T
Return DeSerialize(Of T)(compression, path, New T)
End Function
End Class
<Serializable()> _
Public Class Verwaltung
Public Items As List(Of stundenplan)
Private Shared dataPath As String = _
path.Combine(Application.StartupPath, "stundenplan.dat")
Public Sub New()
' hinzufügen des Arrays, nur wie???
End Sub
Public Sub Save()
' Aufrufen der generischen Serialize-Funktion für
' die Klasse Kontoverwaltung
Serializer.Serialize(Of stundenplan)(dataPath, stundenplan) _
'stundenplan ist die Klasse für das Form selber, also Array speichern
' usw.
End Sub
Public Shared Function Load() As Verwaltung
' Dadurch, dass die Klasse "Sub New()" aufweist, kann die
' Serializer-Klasse, wenn keine Datei vorhanden ist,
' eine DefaultInstance zurückgeben.
Return Serializer.DeSerialize(Of Verwaltung)(dataPath)
End Function
End Class Dieses hab ich fast 1 zu 1 aus dem Tipp übernommen.
in meinem weiteren code hab ich nun folgendes:
<Serializable()> _
Public Structure Stundenplan_data
Dim stundenplan As Array
End Structure ich glaube (wenn ich das richtig verstehe), dass ich nun im sub New() dieses array füllen muss, dass es dann serialisiert werden kann und als .dat datei abgespeichert werden kann.. ich hoffe es kann mir jemand helfen, bzw wenn jemand auch gleich so nett wäre und mir darstellt, wie ich diese .dat datei auch wieder auslesen kann und in ein zweidimensionales array speichern kann würde ich mich sehr freuen.
mfg disconnect
Gehe immer vom Guten Willen Anderer aus! |