?
volkard schrieb:
reicht es nicht, zuerst den CHeader einzulesen, den zu interpretierenm und davon abhängig die CDatenFormatX anzulegen und einzulesen?
Ja genau so sollte es auch sein. Ich bin mir jetzt jedoch nur nicht sicher die ich die Daten an die CDatenFormatx übergeben soll.
Prinzipiell sieht es bei mir so aus. Ich frage mich jetzt halt nur ob dieser temporäre Puffer bei mir wirklich notwendig ist? Ich will halt den Header in CFile, die Daten in CDatenFormat geteilt speichern, aber nur einma aus dem File auslesen und das im CFile.
Verbesserungsvorschläge?
class CFile {
private:
header_struct header; //header-daten werden in einem struct verspeichert
CDatenFormat data; //Klasse mittels starker Aggregation einbinden
public:
virtual void loadFile(string filename); //Laden eines Files
}
CFile::loadFile (string filename) {
ifstream file (filename.c_str(), ios::in|ios::binary|ios::ate);
//Zuerst header laden
file.seekg (0, ios::beg);
file.read ((char*) &header, sizeof(header));
//Jetzt Daten laden
int length;
file.seekg((-header.data_begin), ios::end);
length = streamoff(file.tellg());
file.seekg (header.data_begin, ios::beg);
//Daten in temporären Puffer laden und an andere Klasse, die stark aggregiert wurde einbinden
[b]char * datenbuffer;[/b]
datenbuffer = new char [length];
file.read (datenbuffer, length);
file.close();
//Buffer übergeben
CDatenFormat data(datenbuffer, length);
}
class CDatenFormat {
private:
data_struct format_daten;
public:
CDatenFormat (char* data, length) {
//Speicher für member-variable format_data allokieren und data zuweisen
}
}