Text und Binary
-
Hi,
ich möchte aus einem File binary und text auslesen. Wie kann man das am besten realisieren? Mit 2 Streams, nur binary oder nur text?
Ein kleiner Ansatz wäre nett

Mfg, Martek
-
Willst du das umbedingt mit WinAPI machen?
-
Ja ich möchte das mit WinApi machen. Ich weiß auch das ich dazu fstream brauche, krieg das aber irgendwie net so hin, wie ich das will.
Und das ganze in C++
-
Du kannst mit C evtl. freopen den stream den du mit
fopen("date.dateityp","r");geöffnet hast mit
freopen("datei.dateityp","rb")nochmal öffnen...oder meinst du etwas anderes
-
Ich möchte eigentlich nur auf zwei weisen aus der Datein lesen können. Ich brauche text und binär code. Aber wie das geht, weiß ich eben nicht.
-
Lese einfach binär. Mit binärem lesen kannst du auch Text lesen.
-
Und wie genau bekomme ich den binär code dann in text umgewandelt? Also wie müsste ich das anstellen, wenn ich mit dem fstream im binary modus text auslesen will?
-
Es gibt keinen Binärcode in dem Sinne, es ist nur eine Interpretationssache.
Zeichen kleiner 30 und größer 127 sind Sonderzeichen die du teilweise nicht direkt ausgeben kannst, deswegen zählen sie nicht als Text. Aber wenn du Text hast ist es egal ob du ihn mit "r" oder "rb" einließt.Ich kenne mich mit fstream nicht aus.
Ich habe mir die Referenz angesehen und verstehe nichts, zuviel Zeug was von Zeug erbt was von Zeug erbt was von Zeug erbt was von Zeug erbt.... C++ eben.In C würdest du sowas schreiben:
char *readFile(const char *filename){ //code heavily changed from http://www.cplusplus.com/reference/clibrary/cstdio/fread/ FILE *file = fopen(filename, "rb"); if (!file){ fprintf(stderr, "Failed opening file %s\n", filename); return 0; } //get file size fseek(file, 0, SEEK_END); size_t filesize = ftell(file); rewind(file); //get memory to contain the whole file char *buffer = (char*)malloc(sizeof(char)*filesize); if (!buffer){ fprintf(stderr, "Out of Memory\n"); return 0; } //read file if (fread(buffer,1,filesize,file)!=filesize){ fprintf(stderr, "Failed reading file %s\n", filename); free(buffer); fclose(file); return 0; } //clean up fclose(file); return buffer; }Und soweit ich gehört habe lassen sich C-Strings einfach in C++-Strings umformen, also könntest du diese C-artige Funktion benutzen.
Auf www.cplusplus.com/reference/iostream/fstream gibts eine Dokumentation die du vielleicht verstehst.
Jedenfalls, der Inhalt der Datei ist dann im String drin, unabhängig davon was der Inhalt der Datei war, Text oder binär. Du musst nur ein bischen vorsichtig mit großen Dateien sein, ein DVD-Image willst du nicht auf die Art laden weil eine ganze DVD im RAM doch etwas heftig ist.
Ansonsten gibts Probleme wenn '\0'-Zeichen in der Datei standen, in dem Fall musst du dir halt filesize merken und wissen dass es nach diesem Zeichen eventuell noch weiter geht.
-
Mhm, ich wollte das ganze aber schon gerne mit c++ schreiben, also mit fstream.
Bloßen text auslesen oder binär code klappt ja auch, ich bekomm es nur nicht hin mit dem binaryReader text auszulesen und dann zu vergleichen, z.b. ob da "abc" drin steht.Mfg, Martek