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.