ערכתי לאחרונה בתאריך 25.08.05 בשעה 08:36 בברכה, chenke
בעייה בשמירה וטעינה של אובייקטים מקובץ ב- C++
----------------------------------------------בתוכנית שאני כותב יש אובייקט מסוג user_info, שמייצג מידע על משתמש.
כמו כן אובייקט מסוג user_list שמייצג רשימה של אובייקטים מסוג user_info
שמיוצגת ע"י וקטור (STL) ומגובת בקובץ.
הבנאי של user_list, בודק אם הקובץ שמאחסן את רשימת המשתמשים קיים. במידה
והוא קיים, אז הוא אמור לפתוח אותו ולטעון את המידע ממנו לתוך הוקטור, אחרת
הוא יוצר קובץ חדש. להלן הבנאי:
user_list::user_list() { char* FileName="user_list.dat"; CFileStatus status; int userSize=sizeof(user_info); int userInFile; int i; user_info user; if( CFile::GetStatus( FileName, status ) ) //file exsist { users_file.Open( FileName, CFile::modeNoTruncate|CFile::modeCreate|CFile::modeReadWrite ); userInFile=users_file.GetLength()/userSize; user_list::numOfUsers=userInFile; users_file.SeekToBegin(); for (i=0;i<userInFile;i++) { users_file.Read(&user,userSize); users.push_back(user); } } else //new file { users_file.Open( FileName, CFile::modeCreate | CFile::modeReadWrite ); user_list::numOfUsers=0; } }
|
קיימת באובייקט user_list גם מטודה לשמירת המידע מהוקטור לקובץ:
void user_list::saveUsers() { vector<user_info>::iterator j; int userSize=sizeof(user_info); users_file.SeekToBegin(); for (j = users.begin(); j != users.end();j++) { users_file.Write(&j,userSize); } }
|
הבעייה היא שברגע שהבנאי מזהה שקיים קובץ שמכיל רשימת משתמשים,
אז הוא פותח אותו ומנסה להתחיל לטעון ממנו מידע. הוא טוען מידע
על המשתמש הראשון (מידע שהוא זבל לפי מה שבדקתי) ואחרי זה התוכנית
נופלת.
מה כתבתי לא נכון? איך מתקנים?
חן.