Ich habe ein Problem mit dem Abspeichern und dem Aufrufen von einer Liste aus einer externen Datei.
Wenn ich erst abspeicher und direkt wieder lade ohne das Programm vorher zu schließen funktioniert alles reibungslos.
Wenn ich aber die Liste erst abspeicher, das Programm schließe, neu starte und dann versuche die Liste wieder zu laden stürzt das Programm entweder ab oder ich bekomme nur Teile des Abgespeicherten wieder.
Ich hoffe jemand von euch kann mir helfen
Meine Speicherfunktion
Code:
void cVisualBackpack::SaveList (list <sItem> listX, char *szFileName) { ofstream Output (szFileName, ios::binary); int iSize = listX.size (); list <sItem>::iterator listIt; Output.write ((char *)(&iSize), sizeof (iSize)); for (listIt = listX.begin () ; listIt != listX.end () ; ++listIt) Output.write ((char *)(& (*listIt)), sizeof (sItem)); Output.close (); }
Code:
list <sItem> cVisualBackpack::LoadList (char *szFileName) { ifstream Input (szFileName, ios::binary); int iSize = 0; list <sItem> lTempList; lTempList.clear (); sItem TempItem; Input.read ((char *)(&iSize), sizeof (iSize)); for (int i = 0 ; i < iSize ; ++i) { Input.read ((char *)(&TempItem), sizeof (sItem)); lTempList.push_back (TempItem); } Input.close (); return (lTempList); }
Code:
typedef struct { const char *szItem; float fGewicht; } sItem; sItem ItemsAndreas [] = { {"Hose", 0.53f}, {"Socken", 0.34f}, {"Jacke", 0.76f}, {"Rucksack", 2.22f} }; class cVisualBackpack { public: void AddItem (HWND hListHwnd, sItem Item); void RemoveItem (HWND hListHwnd); void RemoveAll (HWND hListHwnd); void SaveList (list <sItem> listX, char *szFileName); list <sItem> LoadList (char *szFileName); int GetSelItem (HWND hListHwnd); float getGewicht (); list <sItem> m_lsItemAndreas; list <sItem> m_lsItemUte; list <sItem>::iterator i; private: float getFloat (char *szBuffer); float m_fGesamtGewicht; list <float> m_lfGewichte; }; for (int x = 0 ; x < ARRAYSIZE (ItemsAndreas) ; ++x) myBP.m_lsItemAndreas.push_back (ItemsAndreas [x]); myBP.SaveList (myBP.m_lsItemAndreas, "Andreas.sav"); myBP.m_lsItemAndreas = myBP.LoadList ("Andreas.sav"); if (!myBP.m_lsItemAndreas.empty ()) for (myBP.i = myBP.m_lsItemAndreas.begin () ; myBP.i != myBP.m_lsItemAndreas.end () ; ++myBP.i) myBP.AddItem (hListBoxSchrank, *myBP.i);