ifstream Merkwürdigkeit
-
Folgende Punkt, über den gestolpert bin.
Da ich eine Datei in mehrere Chunk zerlegen und als einzelne Streams versenden möchte, nutze ich sinnvollerweise ifstream / ofstream.Dabei bin ich auf eine Merkwürdigkeit gestoßen, die ich nicht ganz verstehe.
Ich habe also einen ifstreamifstream infile (file,ifstream::binary);und lese jeweils einzelne Datenblöcke aus der Datei, etwa so:
infile.seekg(z.chunksize * i); infile.read(buffer, z.chunksize);wobei z eine eigene Struktur zur Chunkverwaltung ist.
In einer Testfunktion funktioniert dieses Zerlegen und Zusammensetzen einer bin Datei tadellos, freilich nur solange der ifstream beständig geöffnet ist.
Öffne und schließe ich die Datei beständig
[b]infile.open(file);[/b] infile.seekg(z.chunksize * i); infile.read(buffer, z.chunksize); [b]infile.close()[/b];so ist das Ergenbnis zwar eine Datei mit der entsprechenden Bytezahl, aber sie ist korrupt.
Gibt es, was das Öffnen und Schließen einer Datei belegt, einen zeitkritischen Faktor?
-
Ist es eigentlich Absicht, daß beim zweiten Beispiel kein ios::binary angegeben wurde?
-
Nein, genau das war das Problem
infile.open(file, ios::in | ios::binary);
Damit ist das Problem gelöst, herzlichen Dank.