Перезаписать fstream
От: NordWest Россия  
Дата: 12.09.08 10:21
Оценка:
Нужно открывать фаил в 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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.