Зависит ... Есть несколько способов сделать это, в зависимости от ваших требований.
Основное решение состоит в считывании фрагментов данных из исходного файла в целевой файл, пропуская биты, которыедолжен быть удален (всегда ли удаляется только один сегмент или несколько сегментов?).После того, как вы закончите, удалите исходный файл и переименуйте временный файл на имя оригинала.
Следует помнить, что вы должны стремиться к большим кускам, а не к меньшим.Размер ваших файлов определит подходящее значение.1 МБ - это хорошее значение «по умолчанию».
Простой подход предполагает, что удаление и переименование нового файла не является проблемой.Если у вас есть определенные разрешения, прикрепленные к файлу, или использованные потоки NTFS или что-то подобное, этот подход не будет работать.
В этом случае сделайте копию исходного файла.Затем перейдите к первому байту после сегмента, чтобы игнорировать его в скопированном файле, перейдите к началу сегмента в исходном файле и перенесите байты из копии в оригинал.Если вы используете Streams, вам нужно вызвать Stream.SetLength, чтобы обрезать оригинал до правильного размера