Когда яfstream заменить часть файла
fstream someFile("something.dat", ios::binary|ios::out);
someFile.seekp(someLocation, ios::beg);
someFile.write(someData, 100);
Кажется, заменить весь файл с этих 100 байт вместо замены только соответствующие 100 байт, как если бы я указано Ios :: TRUNC. Есть ли переносимый способ не обрезать файл?
Редактировать: Добавление ios :: in похоже на трюк, почему это необходимо, и является ли это стандартным поведением?
Редактировать # 2: Я не пытаюсь добавить существующий файл. Мне нужно заменить 100 байт, оставив остальное без изменений.
Является ли in & out нестандартным или вы предлагаете этот альтернативный метод безопасности данных? – Sydius
вход и выход стандартно, просто получить код в порядке. Это несколько проще с записью или фиксированным форматом данных, но способ ввода IO по умолчанию на языках C-типа - это текстовые записи переменной длины или чистые двоичные файлы. Поэтому, если вы ошиблись в размерах или смещениях, или у вас есть несколько авторов, вы можете перетащить весь файл. Если вы сделаете обновление основного файла, вы, по крайней мере, должны получить файл, который будет внутренне непротиворечивым. –