File-Stream-Klassen -> Datei in Häppchen einlesen
-
Guten Morgen !
Ich steige durch die File-Stream-Klassen nicht ganz durch.
Mein Code sollte folgendes erledigen:
- Datei binär öffnen
- Datei in 8-Byte-Happen in einen Puffer (unsigned char buffer[8]) lesen
- ...Theoretisch habe ich mir das so vorgestellt.
Anfangs die Dateigröße in einer long Variablen speichern.
Mit einer while - Schleife die Datei in den Puffer einlesen. Ungefähr so#include <fstream> using namespace std: void read8bytehappen (char *filename) { ifstream FName(filename, ios::in | ios::binary); long flen; /* Größe der Datei in Bytes */ int bsize; /* Größe des "Lese-Happens" */ unsigned char buffer[8]; /* Lese Puffer */ flen = GIB_GROESSE_IN_BYTES; while (flen > 0) { bsize = __min(8, flen); /* gucken ob noch 8 Byte übrig sind */ READ (buffer, bsize); /* Datenmenge von bsize in den Puffer lesen */ flen -= bsize; /* Zähler dekrmentieren */ } FName.close(); }
Ich weiß jetzt nur leider nich wie ich die Größe einer Datei in Bytes herausbekomme und wie ich das einlesen mit immer 8 Bytes bewerkstellige.
P.S.: GIB_GROESSE_IN_BYTES und READ sind natürlich nur fiktive Funktionen zur Demonstration. Suche allerdings die "echten" dafür.
-
Hm, so müsste es klappen:
ifstream is; is.open ("test.txt", ios::binary ); // get length of file: is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg);
Devil
-
devil81 schrieb:
Hm, so müsste es klappen:
Jawoll. Dem ist auch so. Vielen Dank.
Jetzt gibt es allerdings noch ein weiteres Problem. Und zwar das Einlesen.
Das mache ich mit der Methode read der Klasse. Wunderbarer Weise sind die Methoden auch schön überladen für singned char*/char*/unsigned char*. doch leider zeigt mir der Compiler immer einen Fehler an:... unsigned char* kann nicht nach char* konvertiert werden ...
Meine Variable ist aber mit unsigned char buffer[8] deklariert. Wie kann ich denn nun die überladene(n) unsigned char Methode(n) nutzen ?
-
devil81 schrieb:
ifstream is; is.open ("test.txt", ios::binary );
das ist unperformant und unnötig
ist besserifstream is("test.txt", ios::binary );
-
Jetzt gibt es allerdings noch ein weiteres Problem. Und zwar das Einlesen. Das mache ich mit der Methode read der Klasse. Wunderbarer Weise sind die Methoden auch schön überladen für singned char*/char*/unsigned char*. doch leider zeigt mir der Compiler immer einen Fehler an: ... unsigned char* kann nicht nach char* konvertiert werden ... Meine Variable ist aber mit unsigned char buffer[8] deklariert. Wie kann ich denn nun die überladene(n) unsigned char Methode(n) nutzen ?
Weiß keiner wie ich überladene Funktionen richtig einsetzen kann ?
-
Hast Du es schonmal mit casten versucht?
-
Selbstverständlich. Das funktioniert ja auch. Aber ich verstehe nicht warum ?Die Funktion ist doch überladen oder irre mich da ?