Ich suche für folgendes Problem den besten Lösungansatz.
Ziel:
Ein Fileheader für eine beliebige Datei soll erzeugt werden (z.B. Tiff, BMP, AVI) etc.
Vorraussetzung:
Die entsprechende Spezifikation lieft vor.
Mein erste Lösungsansatz:
Schreiben des Headers Byteweise in ein Array oder einen Stream.
Ich suche aber eine bessere Lösung. Bei dem obrigen Lösungansatz muss ich viel mit Offsets arbeiten die sich aber unter umständen verschieben könnten. Zudem sind Arrays ein Problem was berücksichtigt werden muss wenn man mit festen oder variabelen Offsets arbeitet. Zudem ist die Lösung einfach unschön.
Welchen Lösungsansatz würdet ihr verwenden um Sturcturen mit festen oder variabelen Größen entsprechende der Specification des Dateiformats zu schreiben.
Nachdem ich die Frage verstanden hab hier ein Vorschlag: Baue Dir eine Basisklasse die die Rohdaten hält und leite davon Deine einzelnen 'typisierten' Klassen ab. Dort kannst Du dann mit Properties die Rohdaten direkt umwandeln oder auch setzen. Du könntest sogar 'Zwischenklassen' schreiben die gemeinsamte Properties verwalten (Breite+Höhe für Bilder egal welchen Formats).
Beispielcode:
class FileBase { private List<byte> header; private List<byte> data = new List<byte>();
public FileBase(int headerlength){ header = new List<byte>(new byte[headerlength]); }
public void Save(BinaryWriter bw) { bw.Write(header.ToArray()); bw.Write(data.ToArray()); } }
class BmpFile : FileBase { public FileBase():base(2){}
public int Width { get{ return BitConverter.ToInt32(header,0); } set { header.RemoveRange(0,2); header.InsertRange(0,BitConverter.GetBytes(value)); } } }
Frage: WARUM? .NET bietet mit der Image Klasse genug Möglichkeiten der Bildver-/bearbeitung und kann auch Laden und Speichern.
Wenn es denn nicht anders geht: Eine Klasse um alle benötigten Daten zu halten und der eine Methode Save() spendieren, die alle Daten sichert. Aber: Du wirst nicht um die Einhaltung des Formates herumkommen, also auch nicht darum feste Offsets + Co einzuhalten.
"Ein Fileheader für eine beliebige Datei soll erzeugt werden (z.B. Tiff, BMP, AVI) etc" Die Betonung liegt auf "beliebig".. die Image-Klasse von .Net kann keine Avis, DTAUS oder Propitäre Dateiformat-Strukturen erzeugen oder? In C++ würde ich keine Offsets brauchen da ich einfach eine passende Struktur erzeuge und diese Speichere. Ganz so einfach ist es zwar nicht, da auch hier Arrays mittleres Problem darstellen, ich such aber nach einer Lösung in C#.