#.net #vb.net #file-io
#.net #vb.net #file-io
Вопрос:
У меня есть большой файл (обычно более 1 ГБ) в следующем формате:
[информация заголовка, 128 байт] [содержимое, 1 ГБ]
Мой вопрос: есть ли простой способ обрезать информацию заголовка без необходимости читать часть содержимого и снова сохранять на диск? Я имею в виду, что мне просто нужно изменить существующий файл и удалить часть заголовка.
Обновить:
Заголовок находится в начале файла
Комментарии:
1. Вы хотите изменить файл? Чтобы его длина составляла 128 байт? Если это так, вызовите SetLength для FileStream, и все готово.
2. @David Heffernan: изменение существующего файла таким образом, чтобы файл содержал только часть содержимого
Ответ №1:
Если заголовок находится в начале файла, то просто невозможно удалить этот заголовок без полной перезаписи всего файла. Это просто природа файловых систем.
Очевидное решение головоломки — поместить заголовок прямо в конец файла. Это тривиальная операция по удалению конца файла. Другим вариантом было бы поместить заголовок в отдельный файл или даже в альтернативный файловый поток.
Ответ №2:
С точки зрения файловой системы содержимое файла — это просто последовательность блоков. В то время как файловая система обычно допускает некоторую «слабину» (т. Е. неиспользуемое пространство) в последнем блоке (для размещения размера файла, не кратного размеру блока), файловая система просто не сконструирована так, чтобы допускать какую-либо слабину в первом блоке. Другими словами, содержимое файла должно начинаться с начала первого блока.
Таким образом, вы не можете обрезать произвольный объем данных с начала файла. Даже обрезка объема данных, равного размеру блока, не предоставляется ни через один известный мне API.
Ответ №3:
Короткий ответ: Нет, не существует. Каждый бит содержимого должен быть перемещен.