Нужно открывать фаил в fstream, копировать его содержимое в строку string, работать с ней как с буфером, а при условии, что она изменена, перезаписывать файл её содержимым.
Т.е. так. Открываем:
char *fn;
string *buf;
fstream *fS;
fS->open(fname, ios_base::in | ios_base::out);
if(!fS->is_open())
{
fS->open(fname, ios_base::in | ios_base::out | ios_base::trunc);
if(!fS->is_open()) return 1;
}
this->defSize();
char *tstr = new char[this->size];
this->buf = new string();
fS->read(tstr, this->size);
this->buf->insert(0, tstr);
А затем надо сохранить содержимое buf в файл fS.
Сначала необходимо удалить предыдущее содержимое. Пробовал двумя способами.
Первый:
this->fS->clear();
Второй:
this->fS->close();
this->fS->open(this->fn, ios_base::in | ios_base::out | ios_base::trunc);
После чего запись:
fS->seekg(0, ios_base::beg);
char *tstr = new char[this->size];
strcpy(tstr, buf->data());
this->fS->write(tstr, size);
В первом случае, если содержимое буфера уменьшилось, то на конце файла будут символы 'H'.
Во втором — на выходе оказывается пустой файл.
Как правильно перезаписать файл fstream?