Pliki binarne c++

0

Piszę prosty program do obsługi plików binarnych.
Mam taką strukturę:

struct ksiazka
{
     string tytul;
     string autor;
     int liczba_stron;
     gatunek_ksiazki gatunek;
     int id;
     int wypozyczona;
}; 

I zapisuję ją do pliku w taki sposób:

ofstream plik1("dane.dat",ios::binary | ios::out | ios::app);
ksiazka ks;
plik1.write(reinterpret_cast<char*>(&ks), sizeof(ks));

Oczywiście przypisuję odpowiednie wartości w strukturze.
Odczytuję je w ten sposób:

ifstream plik("dane.dat", ios::binary | ios::in);
ksiazka ls;
while(1)
        {
        plik.read(reinterpret_cast<char*>(&ls),sizeof(ls));
        if(plik.eof()) break;
        cout<<endl<<ls.tytul<<"  "<<ls.autor<<"   "<<ls.liczba_stron<<"   "<<ls.gatunek;
        }
        plik.close(); 

Jeśli plik jest nowo tworzony to zapis i odczyt się uda. Ale jeśli plik już istnieje a ja chcę tylko odczytać dane to wyskakuje mi taki oto błąd:
Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00241613. Read of adress 01F35D6'. Process stopped. Use Step or Run to continue.
Oczywiście próbowałem odczytywać wg metody dostępnej w artykułach na 4programmers ale dostaję ten sam błąd.
Używam Borland c++ builder 6 personal(muszę). Jak mogę to rozwiązać, gdzie robię błąd.

0

Czyli jeśli wymienię stringi na tablice znaków(char), to wtedy to magicznie zacznie działać?

0

Jeżeli nie będzie innych błędów to tak, ale na pewno ze stringami funkcje write/read nie będą działac jak powinny.. możesz też napisac własną funkcje do zapisu/odczytu i wtedy stringi będą mogły zostac, looknij na moje funkcje z w.w. linku

0

Zawsze uważałem, że ten język jest albo dziwny albo ja jestem za głupi żeby te udziwnienia zrozumieć.
Po prostu zamienię stringi na chary będzie najłatwiej. Chcę wczytywać całą strukturę więc jakiekolwiek zabiegi niewiele dadzą. Po prostu trzeba się "ukorzyć" przed c++ i zrobić na tablicach znaków.
Dzięki za pomoc.

0

Pięknie i ładnie.... tylko ja nie mogę używać klas. Więc nie zrobię tak jak pan bóg nakazał... Muszę to zrobić w taki sposób. Ja nie narzekam, że jest do d**y po prostu narzekam i na niego i na siebie.

0

Może i tak.... ale klasy, przeciążanie operatorów ty szkoła jazdy poza moją ligą chyba, zbyt skomplikowane. Więc chyba zostanę przy charach

mam nie tworzyć własnych

0

Wywal struct.... może i tak. ale teraz rozwiązanie może nie po Bożemu ale jakieś mam, a nad rozwiązaniem z klasą musiałbym jeszcze posiedzieć i pomęczyć się trochę i nie mam pewności czy sobie z tym dam radę, bo po co mam robić coś czego i tak nie będę rozumiał a po prostu będzie działać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1