• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Maps in Bin.Datei schreiben mit file()

Status
Für weitere Antworten geschlossen.
C

Cryspy

Guest
Sers,
ich glaube der Titel sagt schon alles.

Im Prinzip wei0 ich ja wie das geht, aber wenn ich die Daten rausholen will, funktioniert das nicht...

Bitte um Hilfe!

mfg cryspy
 
Werbung:
was genau tut denn nicht?
hast du schon nen Ansatz?
welche Sprache? (in dem Thread stehn ne ganze Latte Sprachen zur Auswahl ;)

lg,
n1ob
 
Ups sry, C++. Ich hab den code nicht mehr... Aber er hat eifnach 0 oder gar nix ausgegeben.
 
Werbung:
Dann seh ich das richtig, das dein Problem beim auslesen der Datei liegt?
Funktionierts denn mit "normalen" Daten? ..also einfach n Text oder so?

lg,
n1ob
 
Maps in normale Text-Datei... öhm... Ja, aber bei der Bin muss man ja bei fprintf() oder so, noch irgendwelche Dateigröße und so angeben... Ich kanns grad nicht nachgucken, weil ich des Buch wo ich's drinstehen hab ausgeliehen hab...
 
wenn du beispielsweise sowas hast:

Code:
File *file;
char hallo = "Hallo";
file = fopen("data.bin", "wb");
fwrite(hallo, 1, sizeof(char), file);

Damit schreibts du Binär Hallo in eine Datei.
Mit dem lesen funktioniert das genau so.

Code:
File *file;
char text;
file = fopen("data.bin","rb");
fread(text,1,sizeof(char),file);
 
Werbung:
Das is mir schon klar, aber es gehtum Maps.

Code:
map<int,char*> MapTest

So was. Muss ich da jeden Datensatz einzeln reinschreiben ode rkan nich die ganze Map hineinverfrachten???
 
Hallo,

da wirst du wohl jeden Eintrag selber in die Datei schreiben müssen, da Map afaik keinen Stream liefern kann und die Output-Streams auch aus der Map keinen erzeugen können.

Aber jag doch einfach ein for_each drüber, und schreib mit der angegebenen Funktion die Daten in die Datei. Maps speichern ihre Werte als Elemente vom Typ pair, bei dir also pair<int, char*>.

@gollum: Das ist C, kein C++.

N43
 
Hab ichs mir gedacht. Also danke.
Wie gut das ich ne for() das für mich machen lassen kann xD
 
Werbung:
Naja... Man kann schon die Alten C mittel nehmen, aber wenn man das komplett so durchzieht, was antwortet man dann wenn man gefragt wird in welcher Sprache das Programm geschrieben wurde^^

Ok, ich habs mal mit fread und so probiert. Bei fwrite fnktioniert alles einwandfrei, aber wenn ich dann den Inhalt mit fread wiederrausholen will, hängt sich mein ganzes Programm auf!

Also, es handelt sich um eine map<int,char*>Test Map.
Was muss ich da bei fwrite(Test[0],hier,sizeof(hier),file) angeben??? Die gleiche Frage dann auch noch für fread.
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Hallo,

zu C/C++ Funktionen kann ich nur die Seite cpp reference empfehlen.

Code:
int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
Es werden aus dem Array buffer count Elemente der Größe size in den Datei-Stream stream geschrieben.

So ähnlich auch für fread. Test[0] ist übrigens schlecht, das könnte in die Hose gehen, weil eine Map kein Array ist. Für sowas hat man in C++ die Iteratoren.

Aber nehm doch die C++ Funktionen, die machen dir das wesentlich einfacher und eleganter.


Wenn du als Indices alle Werte von 1 .. n hast, dann könntest du auch ein Array verwenden und das dann mit resize() vergrößern. Was anderes macht Map intern auch nicht. Eine Map lohnt sich also nur, wenn du zwischen Indices sehr große Abstände (oder keine Zahlen als Indices) hast.


N43
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben