Есть ли простой способ обрезать файл?

#.net #vb.net #file-io

#.net #vb.net #file-io

Вопрос:

У меня есть большой файл (обычно более 1 ГБ) в следующем формате:

[информация заголовка, 128 байт] [содержимое, 1 ГБ]

Мой вопрос: есть ли простой способ обрезать информацию заголовка без необходимости читать часть содержимого и снова сохранять на диск? Я имею в виду, что мне просто нужно изменить существующий файл и удалить часть заголовка.

Обновить:

Заголовок находится в начале файла

Комментарии:

1. Вы хотите изменить файл? Чтобы его длина составляла 128 байт? Если это так, вызовите SetLength для FileStream, и все готово.

2. @David Heffernan: изменение существующего файла таким образом, чтобы файл содержал только часть содержимого

Ответ №1:

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

Очевидное решение головоломки — поместить заголовок прямо в конец файла. Это тривиальная операция по удалению конца файла. Другим вариантом было бы поместить заголовок в отдельный файл или даже в альтернативный файловый поток.

Ответ №2:

С точки зрения файловой системы содержимое файла — это просто последовательность блоков. В то время как файловая система обычно допускает некоторую «слабину» (т. Е. неиспользуемое пространство) в последнем блоке (для размещения размера файла, не кратного размеру блока), файловая система просто не сконструирована так, чтобы допускать какую-либо слабину в первом блоке. Другими словами, содержимое файла должно начинаться с начала первого блока.

Таким образом, вы не можете обрезать произвольный объем данных с начала файла. Даже обрезка объема данных, равного размеру блока, не предоставляется ни через один известный мне API.

Ответ №3:

Короткий ответ: Нет, не существует. Каждый бит содержимого должен быть перемещен.