Witam mam taki problem, otoz zapisuje sobie liste swoich obiektow i odczytuje ja dzieki takim metodom:
void Gazomierz::WriteToFile(fstream& plik)
{
plik.write(typ, 25*sizeof(char));
plik.write(rokprod, 5*sizeof(char));
plik.write(rokleg, 5*sizeof(char));
plik.write(numer, 7*sizeof(char));
plik.write(stan, 11*sizeof(char));
plik.write(status, 11*sizeof(char));
}
void Gazomierz::ReadFromFile(fstream& plik)
{
plik.read(typ, 25*sizeof(char));
plik.read(rokprod, 5*sizeof(char));
plik.read(rokleg, 5*sizeof(char));
plik.read(numer, 7*sizeof(char));
plik.read(stan, 11*sizeof(char));
plik.read(status, 11*sizeof(char));
}
ktore sa wywolywane tak:
void Database::GWriteToFile()
{
list<Gazomierz*>::iterator temp;
char nazwapliku[100];
fstream plik;
cout<<"Prosze podac nazwe pliku do zapisu: ";
cin>>nazwapliku;
plik.open(nazwapliku, ios::out|ios::binary);
if(plik.bad())
{
cout<<"\n\n\nBlad podczas tworzenia pliku do zapisu!\n\n\n";
Pauza();
plik.clear();
return;
}
else
{
for(temp = Magazyn.begin(); temp != Magazyn.end(); temp++)
{
(*temp)->WriteToFile(plik);
}
}
}
void Database::GReadFromFile()
{
Gazomierz *gazo;
char nazwapliku[100];
fstream plik;
cout<<"Prosze podac nazwe pliku do odczytu: ";
cin>>nazwapliku;
plik.open(nazwapliku, ios::in|ios::binary);
if(plik.bad())
{
cout<<"Blad podczas odczytywania!\n";
Pauza();
plik.clear();
return;
}
else
{
while(!plik.eof())
{
gazo = new Gazomierz;
if(!gazo)
{
cout<<"\n\nBlad podczas alokacji pamieci!\n";
Pauza();
return;
}
gazo->ReadFromFile(plik);
AddGazomierz(gazo);
}
plik.close();
}
}
Wie ktos moze, dlaczego po wczytaniu 3ego gazomierza, ktory jest ostatnim, jaki zapisywalem do pliku petla wykonuje sie jeszcze raz???
Plik z danymi wyglada tak:
Bailand ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ1999 0 ÍÍÍ123456 0 ÍÍÍÍÍÍÍÍÍbrak ÍÍÍÍÍÍBailand ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ1999 1999 111234 0 ÍÍÍÍÍÍÍÍÍ0 ÍÍÍÍÍÍÍÍÍBailand ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ1999 0 ÍÍÍ123112 0 ÍÍÍÍÍÍÍÍÍbrak ÍÍÍÍÍÍ
Mysle, ze po odczytaniu "brak\0" nie ustawia sie na koncu, tylko zaraz za nim... i wczytuje dalej te slaczki.... dlatego potem przy wypisywaniu listy mam 4 gazomierze, ze czego jeden jest pelen czegos takiego: r&&R&%&^%
prosze o pomoc.
Pozdrawiam.