SYSTEMTIME - mit fwrite speichern und fread laden?
-
Sorry das es gleich noch ein Post ist, aber es sind gleich zwei Fragen zu SYSTETIME bei mir...
Diesmal muss ich ein SYSTEMTIME-STRUCT speichern und dieses nachher wieder laden. Ich speichere es folgendermaßen... Ich benutze fopen(..., "ab+") und fwrite((const void *)&st, 1, sizeof(SYSTEMTIME), fFile);. Wenn ich nun mit fopen(..., "rb") offne und mit fread((LPSYSTEMTIME)&st, 1, sizeof(SYSTEMTIME), fFile); einlese, kommt da irgendwie nur Schrott raus. Wieso???
-
AHA habe gerade gemerkt, dass richtige Werte gespeichert und auch wieder geladen werden! Allerdings muss ich nun eine BESTIMMTE ZEILE aus der Datei lesen! Bisher habe ich immer while(!feof(fFile)) verwendet und dann mit
fgets(szBuf, MAX_PATH, fFile) eingelesen. Dass muss und will ich auch weiter so machen... Nochmal den ganzen Ausschnitt:if((fFile = fopen(szFile, "rb"))) { ListView_DeleteAllItems(GetDlgItem(hMain, IDC_LIST)); //fgets(szItemText, MAX_PATH, fFile); while(!feof(fFile)) { fgets(szTmpCat, MAX_PATH, fFile); fgets(szTitle, MAX_PATH, fFile); fgets(szComment, MAX_PATH, fFile); fgets(szTmpDate, MAX_PATH, fFile); SYSTEMTIME st; fread((LPSYSTEMTIME)&st, 1, sizeof(SYSTEMTIME), fFile); sprintf(szTmpDate, "%d.%d.%d", st.wDay, st.wMonth, st.wYear); MessageBox(NULL, szTmpDate, 0, 0); fgets(szTime, MAX_PATH, fFile); if(szTmpCat[strlen(szTmpCat) - 1] == '\r' || szTmpCat[strlen(szTmpCat) - 1] == '\n') szTmpCat[strlen(szTmpCat) - 1] = '\0'; if(szTitle[strlen(szTitle) - 1] == '\r' || szTitle[strlen(szTitle) - 1] == '\n') szTitle[strlen(szTitle) - 1] = '\0'; if(szComment[strlen(szComment) - 1] == '\r' || szComment[strlen(szComment) - 1] == '\n') szComment[strlen(szComment) - 1] = '\0'; if(szTmpDate[strlen(szTmpDate) - 1] == '\r' || szTmpDate[strlen(szTmpDate) - 1] == '\n') szTmpDate[strlen(szTmpDate) - 1] = '\0'; if(szTime[strlen(szTime) - 1] == '\r' || szTime[strlen(szTime) - 1] == '\n') szTime[strlen(szTime) - 1] = '\0'; if(szTitle[0] != '-') { if(strlen(szDate) == 0) { iDates++; List_InsertItem(GetDlgItem(hMain, IDC_LIST), szTitle, szTmpDate, szTime, 1); } else if(strcmp(szTmpDate, szDate) == 0) { iDates++; List_InsertItem(GetDlgItem(hMain, IDC_LIST), szTitle, szTmpDate, szTime, 1); } } } fclose(fFile); } else MessageBox(hMain, "FEHLER\nLaden der Termine nicht erfolgreich.", "DateStation", MB_ICONERROR);
So... es wird mit fgets immer ein paar Zeilen eingelesen und das ist dann ein Item einer ListView-Liste... Aber ich muss an 5. Stelle fread verwenden und das geht nicht, weil fread dann einfach vom Anfang der Datei ließt und ließt nicht die aktuelle Zeile, andem feof() sich gerade befindet! HILFE!!!