Удаление первых байтов в файле
Есть ли способ удалить первые несколько байтов файла (обрезать его спереди), не используя такие программы, как tail, или не считывая все содержимое файла?
Это связано с тем, что размер файла может составлять сотни МБ или даже ГБ, поэтому чтение и перезапись содержимого файла будет очень неэффективным.
То, что я ищу, - это, возможно, решение, которое позволяет мне сместить начало файла (в таблице размещения файлов), чтобы первые несколько байтов были пропущены.
На винде есть SetEndOfFile
функция, которая позволяет мне обрезать файл, просто ограничивая конец файла, уменьшая размер файла.
Есть что-нибудь подобное StartOfFile
функция, которая позволит мне запустить файл через несколько байтов после его текущей начальной позиции?
Любое другое решение также будет приветствоваться, если оно не требует чтения / перезаписи всего содержимого файла.
1 ответ
Это немного зависит от типа файловой системы, но в большинстве случаев ответ отрицательный. Таблицы размещения файлов - это указатели на конкретные блоки или иноды - смежные порции "файловых данных".
Они поддерживают сокращение - технически вы читаете весь блок, но затем останавливаетесь, когда нажимаете маркер конца файла. Но на самом деле нет никакого механизма для "пропустить до". Чтобы удалить первые несколько байтов, вы можете либо перезаписать их, либо переписать и заново выровнять весь файл.
Что-то вроде dd
может сделать это довольно эффективно.
Эти ссылки могут быть актуальны:
https://unix.stackexchange.com/questions/13907/delete-the-first-n-bytes-of-files Удалить количество байтов из начала файла