Frage von LifeArtist1, 20

Wie kann ich eine C# Datei in bytes[..] mit struct auslesen?

Hallo,

Ich habe eine eigene Dateistruktur erstellt und möchte diese jetzt auslesen.

0x000x00

wobei

0x000x00

Als Beispiel:

"Background" (255,0,0)

42 61 63 6b 67 72 6f 75 6e 64 00 ff 00 00 00

"Water" (255,0,0)

57 61 74 65 72 00 ff 00 00 00 

Ich habe schon gelesen das ich Dateien mit einer struct auslesen kann. Aber wie kann ich ohne zu wissen, wie groß die erste Variable sein wird diese auslesen ?

Antwort
von Palladin007, 5

Ich verstehe zwar nicht ganz, wie dein Format wirklich aussehen soll, aber lass dir gesagt sein: Ein eigenes binäres Format zu kreieren ist fast nie eine gute Idee.
Das lohnt sich nur dann, wenn Du die Daten möglichst stark komprimiert brauchst, weil Du z.B. nur sehr wenig Speicher zur Verfügung hast. Heute ist das aber selten ein Problem.

Besser ist XML, da hat .NET gleich mehrere Möglichkeiten, das simpel zu lesen oder zu schreiben.

Oder Du verwendest binäre Serialisierung. Dann hast Du auch ein binäres Format und .NET kann jedes Objekt, das serialisiert werden darf, auch serialisieren bzw. deserialisieren, solange Du den Datentyp kennst.

Ein tabellarisches Format wie CSV geht natürlich auch, lässt sich aber nur schwer erweitern, wenn die Daten komplexer werden. Sowas würde ich nur verwenden, wenn ich explizit eine Tabelle (z.B. für Excel) brauche.

Sehr beliebt ist auch eine dateibasierte Datenbank wie SQLite oder LocalDb. Du hast alle Vorzüge einer Datenbank, die Daten liegen aber nur in einer Datei, der Du eigene Namen und Endungen geben und hin und her kopieren kannst. Sowas bietet sich an, wenn Du komplexe Daten wie z.B. einen Speicherstand hast.


Aber um die Frage trotzdem zu beantworten:
Wenn Du binär einen Datensatz lesen willst aber nicht weist, wie lang der ist, dann brauchst Du eine Markierung, die dir zeigt, wann der Datensatz zuende ist.
Oder Du fügst an einer festen Stelle einen Datensatz ein, der den eigentlichen Datensatz beschreibt. So könntest Du zum Beispiel vor deinem gesuchten Datensatz ein Byte für die Länge einfügen. Ein ähnliches Prinzip verfolgt auch das Dateisystem FAT32. Beim Lesen der Dateien ist ja auch nicht bekannt, wo und wie groß die Datei ist, daher gibt es eine Tabelle mit fest definierter Größe, wo jede Datei mit der Position und Größe drin steht.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten