Speichern einer List Of in Datei

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    Speichern einer List Of in Datei

    Hallo,

    ich bin dabei eine Liste mit Spielen zu erstellen die abgespeichert werden soll. Das Problem ist, dass ich keine Ahnung habe wie ich das mache:

    Ich habe eine List Of:

    VB.NET-Quellcode

    1. Public Gamelist As New List(Of Game)
    2. Public Structure Game
    3. Dim Gamename As String
    4. Dim Singleplayer As Boolean
    5. Dim Multiplayer As Boolean
    6. Dim Gamesize As Integer
    7. End Structure


    Mit dem folgendem Code kann ich ein Spiel der Liste hinzufügen:

    VB.NET-Quellcode

    1. Dim NewGame As Game
    2. NewGame.Gamename = "Daylight"
    3. NewGame.Singleplayer = True
    4. NewGame.Multiplayer = False
    5. NewGame.Gamesize = 9999999999999999
    6. Gamelist.Add(BannedUser)
    7. 'An dieser Stelle würde ein Code folgen der das neue Spiel einer Listview hinzufügt (aber nur 3 Columns für Gamename, Singleplayer und Multiplayer da die Spielgröße nur in der Liste bleiben soll)


    Jetzt möchte ich den Inhalt der Liste (nicht der Listview) abspeichern in eine Datei und beim nächsten Start des Programms wieder in die List Of laden.
    Ist das möglich und wenn ja wie? Oder sollte ich besser eine andere Variante wählen?

    Mit freundlichen Grüßen
    Freenex
    Schaue Dir mal Serialisierung an.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Dann hast Du wohl nicht richtig serialisiert, denn normal funktioniert das ohne Probleme.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    mir zumindest wäre lieber, du stellst deinen Code ein, und wir korrigieren den.
    stell am besten die ganze Methode ein, nicht nur iwelche hergelaufene Zeilenschnipsel.

    Ich nehme mal an, du hast 2 Methoden - eine zum schreiben, und eine zum einlesen (andernfalls schreib diese Methoden halt).

    Also zu diskutieren wären 2 Methoden,die du einstellst.

    Falls du nicht recht verstehst, was ich rede, vlt.: Grundlagen: Fachbegriffe
    Du magst ein Spiel Programmieren, richtig ? Also, die Serialisierung ist genau das was du suchst. Jedoch würde ich die ListOf in einer extra Klasse erben lassen, da du diese auch Serialisierbar kennzeichnen musst.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Schreibe die Spieldaten erstmal in einen StringBuilder, für jedes Spiel eine neue Zeile, die einzelnen Werte getrennt durch z.B. ';'. Und dann kannst du das noch kodieren oder einfach so reinschreiben.
    Eine weitere Möglichkeit wäre, wenn du Daten mithilfe der XML-Klassen schreibst und liest. Das wäre dann so Serialisierung, wie die anderen schon erwähnt haben.
    @Jonas Jelonek eine XML ist keine Serialisierung. Bei einer Serialisierung wird eine Klasse in Bytes und von Bytes zu der Klasse Umgewandelt. Bytes kann man ja ganz einfach als Datei Speichern.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Serialisierung ists, wenn ein Serializer verwendet wird. Es gibt Xml-Serializer, aber es gibt auch andere Serializer, also das Ergebnis einer Serialisierung kann eine Xml-Datei sein.

    Es gibt weitere Möglichkeiten, Xml-Dateien zu erzeugen, das ist dann aber keine Serialisierung.

    Der Satz:
    eine XML ist keine Serialisierung.
    meint vermutlich das richtige, ist aber von den Begriffen her Unsinn, denn "eine Xml" ist eine Datei, und "Serialisierung" ist ein Vorgang.
    Also sprachlicher Unfug, ähnlich wie das berühmte "Nachts ist kälter als Draussen".

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich meinte natürlich, dass eigens erstellen einer XML Datei ist keine Serialisierung. Mir war nicht bewusst, dass man auch als XML Serialisieren kann.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    So ich habs jetzt hinbekommen:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Xml.Serialization
    4. Public Class ListOfGames
    5. Public Gamelist As New List(Of Game)
    6. Public Sub AddGame(ByVal GameName As String, ByVal GamePath As String, ByVal GameSize As Integer, ByVal Singleplayer As Boolean, ByVal Multiplayer As Boolean, ByVal GameStartExePath As String, ByVal GameUsePathToCopy As Boolean, ByVal GameSetupOrZipPath As String, ByVal GameReadMePath As String, ByVal GameOpenFolderPath As String)
    7. Dim NewGame As New Game
    8. With NewGame
    9. .GameName = GameName
    10. .GamePath = GamePath
    11. .GameSize = GameSize
    12. .Singleplayer = Singleplayer
    13. .Multiplayer = Multiplayer
    14. .GameStartExePath = GameStartExePath
    15. .GameUsePathToCopy = GameUsePathToCopy
    16. .GameSetupOrZipPath = GameSetupOrZipPath
    17. .GameReadMePath = GameReadMePath
    18. .GameOpenFolderPath = GameOpenFolderPath
    19. End With
    20. Gamelist.Add(NewGame)
    21. End Sub
    22. Public Sub SaveGamelist()
    23. Dim serializer As New XmlSerializer(GetType(List(Of Game)), New XmlRootAttribute("Gamelist"))
    24. Using file As System.IO.FileStream = System.IO.File.Open(Application.StartupPath & "\Gamelist.xml", IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
    25. serializer.Serialize(file, Gamelist)
    26. End Using
    27. End Sub
    28. Public Sub GetGamelist()
    29. Dim serializer As New XmlSerializer(GetType(List(Of Game)), New XmlRootAttribute("Gamelist"))
    30. Using GamelistFile = System.IO.File.OpenRead(Application.StartupPath & "\Gamelist.xml")
    31. Gamelist = DirectCast(serializer.Deserialize(GamelistFile), List(Of Game))
    32. End Using
    33. For Each GameInGamelist As Game In Gamelist
    34. MsgBox(GameInGamelist.GameName & vbCrLf & GameInGamelist.Multiplayer & vbCrLf & GameInGamelist.Singleplayer)
    35. Next
    36. End Sub
    37. End Class
    38. <Serializable()>
    39. Public Class Game
    40. Public Property GameName As String
    41. Public Property GamePath As String
    42. Public Property GameSize As Integer
    43. Public Property Singleplayer As Boolean
    44. Public Property Multiplayer As Boolean
    45. Public Property GameStartExePath As String
    46. Public Property GameUsePathToCopy As Boolean
    47. 'If GameUsePathToCopy = False then:
    48. Public Property GameSetupOrZipPath As String
    49. Public Property GameReadMePath As String
    50. Public Property GameOpenFolderPath As String
    51. End Class


    Vielleicht gibt es aber ja noch Verbesserungsvorschläge.

    MfG
    Freenex