Zahlen in Dateien binaer speichern?
-
Hallo,
kann mir jemand sagen of folgendes möglich ist?
Ich will einen Datensatz, der aus integer-Zahlen (oder Objekte mit numerischen Werte) besteht, in einer binären Datei speichern. Hintergrund: die Daten dürfen nicht mit Texteditoren lesbar sein). Diese Datei möchte ich dann immer wieder aufmachen und auslesen.
Meine Erfahrung mit C++ ist klein. Das was ich bisher in Bezug auf Dateien gesehn habe, war das Hantieren mit Textdateien (auch wenn diese binär gespeichert oder ausgelesen werden).
Im voraus vielen Dank für Antorten.
Emmanuel
-
Ja geht! Einfach eine Datei im Binärmodus öffnen und per write() schreiben.
grüße
-
David_pb schrieb:
Ja geht! Einfach eine Datei im Binärmodus öffnen und per write() schreiben.
Danke David_pb für Deine Antwort.
Wie kann ich nun die Datei auslesen? Ich öffne Sie zum Lesen und in binären Format auf (ios::in | ios::binary) und lese mit get()? Das ist nur ein Block von Daten. Wenn ich eine numerrische Array gespeichert habe (z.b. int Array[100] ), wie kann ich sie wieder auslesen?
Gebe ich die Array in der console aus: cout << Array; so wird nur die Adresse ausgegeben! Keine Spur von den Daten.
Hat jemand eine Idee, was ich falsch mache?Danke, Emmanuel
-
Hallo
#include <iostream> #include <iterator> using namespace std; int main() { const int N = 16; int meinArray[N]; fill(meinArray, meinArray + N, 1);//zum testen alle elemente auf 1 setzen cout << "Ausgabe mit eigener Schleife:" << endl; for (int i = 0; i < N; ++i) cout << meinArray[i] << " "; cout << "\n\nAusgabe mit STL:" << endl; copy(meinArray, meinArray + N, ostream_iterator<int>(cout, " ")); }
-
Hallo Schorsch,
danke für dein Listing! Das mit der STL muß ich erst verdauen, vor allem die Ausgabe. Die normale Ausgabe per Iteration habe ich schon gekannt. Das Problem mit den Dateien besteht aber weiterhin:
Wie kann ich numerische Werte speichern? Folgende Zeile funktioniert z.B. nicht, da write ein char-Array erwartet:write.datei(meinArray,10)datei wurde so definiert:
ifstream datei(DateiName,ios_base::out | ios_base::binary);wobei
char DateiName[]="Ausgabe.datei";
-
Du könntest den Compiler dazu zwingen die Sicht anzunehmen die Du gerne hättest.
datei.write(reinterpret_cast<char*>(&MeinArray[0],sizeof(int) * 10);(Aber vorsicht, bi nnoch im halbschlaf)
-
Das mußt du zur Not casten (und denk daran, daß int-Werte etwas größer sind ;)):
int werte[10]; fstream datei; ... //schreiben: datei.write((char*)werte,10*sizeof(int)); //lesen: datei.read((char*)werte,10*sizeof(int));
-
Besten Dank an allen, die mir unheimlich geholfen haben! Es funktioniert tatsächlich!! Ich bin begeistert!
Emmanuel
