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

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

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Код (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 дек 2006
    Сообщения:
    1.050
    Стандартными средствами никак. Придётся перезаписывать файл целиком.
     
  3. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    W4FhLF
    С чего бы это?

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

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    _DEN_
    ios_base::app?
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Ustus

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    ios::in|ios::out|ios::binary
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

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

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    А, мне показалось insert нужен.