serializacja - wczytuje zbyt duzo obiektow

0

po zapisaniu , wczytaniu i wyswietleniu jest o jeden obiekt za duzo i wyplniony jest krzakami

void my_vect<T>::load()
{
	clear_all();
	char path[256];
	cout << "Podaj nazwe pliku: ";
	cin >> fileName;
	_searchenv(fileName,"",path);
	if(path == "\0")
	{
		mess.mess(WARN_NO_FILE_EXIST);
		return;
	}
	dataBin.open(path,ios::in | ios::binary);
	if(!dataBin.good())
	{
		mess.mess(WARN_FILE_OPEN);
		return;
	}
	streamsize size = sizeof(T);
	while(!dataBin.eof())
	{

		dataBin.read((char *)&dat[last],size);
		
		last++;
		if(last == ndim)
			realloc();
	}
	
}
template <class T>
void my_vect<T>::save()
{
	char path[256];
	cout << "Podaj nazwe pliku: ";
	cin >> fileName;
	_searchenv(fileName,"",path);
	if(path == "\0")
	{
		ofstream file(fileName, ios::out);
		file.close();
	}
	dataBin.open(fileName,ios::out| ios::binary);
	dataBin.seekp(0);
	for(int i = 0;i<last;i++)
		dataBin.write((char *)&dat[i],sizeof(T));
	dataBin.flush();
	dataBin.close();
}
0
while(dataBin.read((char *)&dat[last],size))
{
	...
}

p.s.1 pewniejszym rozwiązaniem byłoby, gdybyś zapisywał najpierw liczbę elementów, a później elementy.
p.s.2 użycie read/write do serializacji szablonu, a dokładniej niesprecyzowanego typu T, nie jest dobrym pomysłem.

0

k dzieki, a co zrobić jeśli używam funkcji w ktora wczytuje dane i mam

dataBin.seekp(0);

za 1 razem dziala a jak za drugim razem uzywam jest funkcji wskaznik ustawia na -1, i juz nic nie wczyta?

0

Musisz wyzerować flagi błędu metodą clear.

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