Napisalem sobie klase plik : ////////////////////////////////////////////////////////////////////// class plik { private : fstream strumien1,strumien2 ; public : char *nazwa ; long int wsk ; //wskaznik ,gdzie mam zaczac zpisywac template <class typ> void zapis( const typ & , long int); template<class typ> int odczyt(typ &,long int); plik(){}; plik(char *a):nazwa(a){}; //konstruktor pliku ~plik(){}; //destruktor pliku }; ////////////////////////////////////////////////////////////////////////////////
template <class typ>
void plik::zapis(const typ &obiekt,long int k) { cout<<"Jestem w srodku funkcji zapis "<<endl; strumien1.open("koki.txt" ,ios::out|ios::ate|ios::binary); strumien1.seekp(k,ios::beg); strumien1.write(reinterpret_cast<const char*>(&obiekt),sizeof(typ)); wsk = wsk + sizeof(typ); strumien1.close();
}////////////////////////////////////////////////////////////////////////////////////
template <class typ>
int plik::odczyt(typ &obiekt ,long int skad) { cout<<"Jestem w srodku funkcji odczyt"<<endl; strumien1.open("koki.txt",ios::in|ios::binary); strumien1.seekg(skad,ios::beg);
cout<<"CZYTAM "<<sizeof(typ)<<"bajtow z "<<skad<<" -tego miejsca "<<endl; strumien1.read(reinterpret_cast<char
*>(&obiekt),sizeof(typ)); strumien1.close(); return 1 ; } /////////////////////////////////////////////////////////////////////////////// Po napisaniu tego co zamiescilem powyzej ,zadowlony ,ochoczo przystapilem do przetestowania mojego dziela.Jednak dzialanie funkcji zapis i odczyt tej klasy jest dla mnie tajemnica.Funkcje te dzialaja mniej wiecej tak :- jesli jakas dana zapisuje i zaraz ja odczytuje to jest wszystko dobrze
-jesli zapiuje kilka danych ( bez odczytywania pomiedzy kolejnymi zapisywaniami) to program odczytuje poprawnie tylko ostanita dana
Próbowalem juz ( myslac ze tu moze byc blad ) uzyc jednego struminia do pisania i do czytania strum("plik",ios::in|ios::out|ios::ate|ios::binary) ale to nic nie zmienia.Oprocz tego napisalem sobie innym program aby sprawdzic gdzie moze byc problem i doszedlem do nastepujacych wnioskow :
- jesli otworze strumien do pisania , zapisze jakies obiekty w pliku ,i na zakonczenie zamkene strumien do pisania i otowrze strumien do czytania ,odczytam zapisane wczesniej obikety to jest wszstko w porzadku.
-jesli juz po odczytaniu ponownie otworze strumien do pisania , zpaisze jakies dane w pliku , zamkne strumien do pisania ,otworze do czytania i probuje odczytac dane z pliku to dane odczytane sa niezgodne z tymi ktore zapisywalem ( chyba dobrze jest odczytana tylko ostatnia dana )
Za wszelka pomoc bede bardzo wdzieczny Pozdrawiam Kuba