pliki binarne w c++ - odczyt i zapis

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

Reply to
Qba
Loading thread data ...

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.