Seltsames Problem beim Schreiben von Vectoren.
-
Hiho,
habs in nem anderen Thread mal geschrieben (zumd. so in der Art),
allerdings befürchte ich das dieser Post irgendwie unterging,
und da mich das Problem langsam wahnsinnig macht,
nehm ich mir einfach mal raus und erstelle einen extra Thread dafür ;).Also, folgendes:
Ich habe einen Struct:typedef struct tagAgenda { unsigned nYear; unsigned nMonth; unsigned nDay; unsigned nPriority; bool bRemember; TCHAR cDescription[255]; }SAgenda,*PSAgenda;
und einen Vector dafür:
vector<SAgenda> vAgenda;
diesen will ich beim Beenden des Programmes in eine Datei schreiben.
Nur allerdings ist diese immer 0 Byte gross (spr. er schreibt unerklärlicherweise nichts.jetz hab ich schon das versucht (blöde Lösung):
SAgenda ag={0}; fstream file("agenda.bs", ios::out|ios::binary); for (int i = 0; i < vAgenda.size(); ++i) { ag.bRemember = vAgenda.at(i).bRemember; strcpy(ag.cDescription, vAgenda.at(i).cDescription); ag.nDay = vAgenda.at(i).nDay; ag.nMonth = vAgenda.at(i).nMonth; ag.nPriority = vAgenda.at(i).nPriority; ag.nYear = vAgenda.at(i).nYear; file.write((const char*)&ag,sizeof(ag)); } file.close();
das:
SAgenda ag={0}; fstream file("agenda.bs", ios::out|ios::binary); for (int i = 0; i < vAgenda.size(); ++i) { ag = vAgenda.at(i); file.write((const char*)&ag,sizeof(ag)); } file.close();
und so:
fstream file("agenda.bs", ios::out|ios:binary); for (vector<SAgenda>::const_iterator i = vAgenda.begin(); i != vAgenda.end(); ++i) { const SAgenda& fp = *i; file.write((const char*)&fp, sizeof(SAgenda)); } file.close
Ich hoffe mal ihr könnt mir helfen,
bin kurz davor meinen Schädel gegen den Monitor zu donnern.mfg
k1ro
-
Hallo K1ro,
so seltsam ist dein Problem nicht und den Kopf laß mal noch heile. Nur kurz als Hinweis:
vector<SAgenda> VAgenda;
damit hast du zwar einen Vektor deklariert, der hat standardmäßig aber die Größe 0 - damit ist klar, warum du ihn nicht mit einer Schleife oder Iterator durchlaufen kannst.
Versuchs einfach mal mit:VAgenda.push_back(...)
das ist die Standardmethode zum einfügen am Ende des Vektors. Alles klar? Ich denke damit wirst du das jetzt schon hinkriegen.
-
^^
erstmal danke, für die Hilfe,
aber das nützt leider nichts,
weil genau das mache ich an einer anderen stelle des codes (genau beim initliaisieren der Klasse),
und am Ende der Klasse rufe ich dies Schreib-Vector-In-Datei Funktion auf.hier auch mal der ausschnitt wie ich pusbacke..
SAgenda ag={0}; ag.bRemember=false; strcpy(ag.cDescription, "Katze gießen\0"); ag.nDay=7; ag.nMonth=10; ag.nYear=2003; ag.nPriority = 0; vAgenda.push_back(ag);
(btw. bevor die Vermutung aufkommt, ich betrete auch diese Funktion (ganz billig mit ner MsgBox überprüft ^^))
-
fstream file("agenda.bs", ios::out||ios:binary);
da ist ein | zu viel
-
Tippfehler;
Im richtigen Code siehts anders aus (mit einem "|").
-
ok, hab den Fehler gefunden,
lag an was komplett anderem,
zwar:
Im destrutkor der Klasse wird dieser Code aufgerufen,
und bei meinem Hauptfenster rufe ich diesen bei einer WM_DESTROY auf.
Somit wurde die Funktion zwei mal aufgerufen(beim Beenden von Programmen werden Destruktoren standardmässig aufgerufen ?).
Beim 2ten mal enthielt sie halt nur keine daten mehr ....Auf jedenfall aber danke für eure Hilfe