Удалить данные из двоичного файла - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть BinaryReader / BinaryWriter длиной 1000 байтов, каждая запись составляет 50 байтов.Как я могу удалить записи в позициях от 350 до 550 и, в конце концов, сохранить оставшиеся 800 байтов в моем файле?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Самый простой способ - циклически просматривать записи, читать из одного файла и записывать в новый, а также удалять ненужные записи.

Теоретически вы могли бы искать в одном и том же файле, перезаписывая "старые" данные новыми данными, но я бы лично использовал простой подход, где это возможно. Это также означает, что если что-то не получится на полпути, у вас все еще есть оригинальный файл и «плохой» файл, который можно просто удалить, а не файл, который может содержать несколько записей дважды.

1 голос
/ 21 февраля 2012

Вы должны прочитать данные с позиции 550 до конца файла и записать их с позиции 350.

Если вы используете FileStream, вы можете выполнить именно эту операцию.Используя BinaryReader и BinaryWriter, вам нужно будет прочитать все данные в файле и записать данные, которые вы хотите сохранить.Для такого маленького файла вы можете сохранить все данные в памяти, но для большего файла вы бы записали во временный файл и позволили бы заменить исходный файл, когда закончите.

Запись во временный файл можеттакже хорошая идея, чтобы минимизировать риск потери данных.Если что-то пойдет не так в любой момент операции, на диске останется хотя бы один неповрежденный файл.

...