std::fstream перетирает файл

Тема в разделе "LANGS.C", создана пользователем _DEN_, 10 май 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Код (Text):
    1. #include <fstream>
    2.  
    3. int main()
    4. {
    5.     std::fstream out;
    6.     out.open(L"c:/1.txt", std::ios::out | std::ios::binary);
    7.     char f = '6';
    8.     out.write(&f, 1);
    9.     return 0;
    10. }
    Был файл N байт, стал 1 байт. То есть стрим делает truncate. Как перезаписать указанный участок, незатронув оставшуююся часть?
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Стандартными средствами никак. Придётся перезаписывать файл целиком.
     
  3. TSS

    TSS New Member

    Публикаций:
    0
    W4FhLF
    С чего бы это?

    Всего то нужно получить доступ к внутреннему буферу и записать в него что мы хотим, вроде бы даже функции для этого уже есть готовые, правда скорее всего они private или protected, но это же ни разу не проблема.
     
  4. Ustus

    Ustus New Member

    Публикаций:
    0
    _DEN_
    ios_base::app?
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Ustus

    Да не, нужно именно перезаписать первые N байт у большого файла.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    ios::in|ios::out|ios::binary
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Booster

    О... Действительно, надо было просто открыть стрим и на чтение и на запись. Спасибо!
     
  8. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    А, мне показалось insert нужен.