C# - Struct als Datei schreiben und wieder als Struct auslesen?

...komplette Frage anzeigen

3 Antworten

Neben den bisherigen Antworten noch ein kleiner Hinweis:

Egal ob du deinen struct-Typ serialisierst, als eigenes Text-Format, XML, Binär oder von mir aus auch JSON speicherst, vergiss nicht die gelesenen Daten auf Plausibilität zu prüfen!

Diese mangelnde Prüfung ermöglicht oft Sicherheitslücken, vor allem wenn die Daten deiner Struktur in irgend einer Form über ein Netzwerk übertragen werden, kann man damit sehr viel Schindluder treiben!

Das ist genau der Grund, warum man immer von gefährlichen Lücken z. B. im Adobe Reader hört, für die man unbedingt einen Patch einspielen soll. Im Endeffekt läuft das meiste davon auf eine mangelnde Prüfung der Eingangsdaten hinaus.

(Der Adobe Reader prüft dann eine aus dem Internet geladene PDF-Datei nicht ordentlich, und schwupps wird Shellcode ausgeführt!)

Generell sollte man IMMER sämtliche Daten, die aus externen Quellen gelesen werden (Datei, Netzwerk, DB, ...) als kompromittiert betrachten, und einer strengen Prüfung unterziehen. Tut man das nicht, stehen Kriminellen Tür und Tor offen!

Naja, viel Spaß! :)

Du kannst in C# Klassen (und auch structs) als XML-Serializable deklarieren. Du brauchst dann nur die Methoden Serialize und Deserialize implementieren und das Lesen und Schreiben realisieren.

Die XML-Daten selbst kannst Du mit jedem Editor bearbeiten.

Danke, ich schau mir das mal an!

0

Das nennt sich Serialisieren. Du willst dein Struct in ein Format bringen was sich ganz einfach parsen, also lesen lässt. Dafür gibt es einige Formate die eben dass was du mit der Methode machen würdest schon für dich erledigen. So musst du dein Struct nur noch an die Serisilierungsmethode übergeben und anschließend in eine Datei speichern. Da gibt es einige Formate die du verwenden könntest, hier sind ein Paar davon:

  • XML
  • YAML
  • Binär

C# hat glaube ich für alle drei davon eine Methode schon vergefertigt. Google einfach mal nach "C# serialise struct FORMATNACHWAHL".

Was möchtest Du wissen?