XML-Datei wird immer überschrieben

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    XML-Datei wird immer überschrieben

    Guten Abend,
    ich möchte Euch erneut um Eure Hilfe bitten.
    Ich erzeuge mit folgendem Code eine XML-Datei. Daten und Datei gespeichert. Super.
    Beim nächsten turn allerdings werden die alten Inhalte überschrieben und nicht angehängt.
    Was hab ich falsch gemacht und welchen Weg muss ich einschlagen?
    Bin wie immer für jeden Tip dankbar!!

    VB.NET-Quellcode

    1. Private Sub XMLWriter()
    2. Dim enc As New System.Text.UnicodeEncoding
    3. Dim XMLobj As Xml.XmlTextWriter = New Xml.XmlTextWriter("Vokabeln.xml", enc)
    4. With XMLobj
    5. .Formatting = Xml.Formatting.Indented
    6. .Indentation = 4
    7. .WriteStartDocument()
    8. .WriteStartElement("Vokabeln")
    9. .WriteAttributeString("Deutsch", "Blume")
    10. .WriteAttributeString("Englisch", "flower")
    11. .WriteAttributeString("Datum", Date.Today)
    12. .WriteEndElement()
    13. .Close()
    14. End With
    15. End Sub
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    Wenn es rein darum geht Daten zu laden/speichern: Ich würde mir eher eine Serialisierbare Klasse schreiben und diese zum speichern und laden de-/serialisieren.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo Jou.
    @Steamy2010 Eine ggf. binär serialisierte Klasse mit einer List(Of T) als Member, wobei T Deine Datenklasse repräsentiert.
    Einlesen, neues Item adden, speichern, feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der Typ BinaryFormatter ist gefährlich und wird für die Datenverarbeitung nicht empfohlen. Anwendungen sollten so bald wie möglich aufhören, BinaryFormatter zu verwenden, auch wenn Sie der Auffassung sind, dass die verarbeiteten Daten vertrauenswürdig sind. BinaryFormatter ist unsicher und kann nicht sicher gemacht werden.


    Quelle: docs.microsoft.com/de-de/dotne…yformatter-security-guide
    Zun Serialisieren XMLSerialiser oder besser JSONSerialiser verwenden.
    Vielen Dank für Eure Rückmeldungen. Habe versucht mich hinsichtlich der Tips einzulesen.
    Allerdings raucht mir mittlerweile der Kopf und ich weiß überhaupt nicht weiter.
    Ich muss noch nochmal auf die Hinweise zurückkommen.
    @mrMo Inwieweit benötige ich eine De-/Serialisierung? also die "...die Umwandlung des Zustands eines Objekts in eine Folge von Bytes und umgekehrt?"
    @RodFromGermany warum eine neue Klasse? Und warum eine Member-Collection?
    ?(
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)

    Steamy2010 schrieb:

    warum eine neue Klasse? Und warum eine Member-Collection?
    Weil diese Serialisierung komplette Klassen abspeichert.
    Weil dieses System Änderung der Datenstruktur toleriert.
    Weil ich diverse Erfdahrung gesammelt habe.
    Weil ich alles mögliches anderes Zeugs rausgeschmissen habe.
    Du musst lediglich ein einziges Mal die Serialisierung als solche implementieren, danach musst Du Dich nur noch um Deine Daten kümmern.
    Und die findest Du hier im Forum zu Hauf.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mir scheints hier um ein VokabelTrainer-Programm zu gehen.
    Da ists am einfachsteen, man arbeitet mit einem typDataset.
    Das kann man mit dts.WriteXml() auf Platte schreiben - kein Gehampel mit XmlWritern oder auch nur Serialisier-Dingern.

    Allerdings ist eine mit WriteXml() erzeugte Xml-Datei nicht kompatibel mit Serialisierern oder XmlWritern (und untereinander sind sie's auch nicht).

    Also wähle eine Technologie, und versuche nicht mit der einen zu schreiben und mit der anderen zu lesen.

    Aber wie gesagt: typDataset hat alles was du brauchst (und noch mehr) - du musst es nur herausfinden.