Высокоэффективные API файловой системы для определенных видов операций
Иногда мне нужны определенные API-интерфейсы файловой системы, которые могут быть реализованы очень эффективно, если они поддерживаются файловой системой, но я никогда о них не слышал. Например:
- Усеченный файл с начала, на границе единицы размещения
- Разделить файл на две части на границе единицы размещения
- Вставьте или удалите фрагмент из середины файла, опять же, на границе единицы размещения
Единственный известный мне способ делать подобные вещи - переписывать данные в новый файл. Это имеет то преимущество, что единица выделения больше не актуальна, но чрезвычайно медленная по сравнению с некоторыми низкоуровневыми средствами файловой системы.
Я понимаю, что требования выравнивания означают, что методы не всегда применимы, но я думаю, что они все еще могут быть полезны. Например, файловый архиватор может очень эффективно обрезать архив после того, как пользователь удалит файл из архива, даже если это оставляет небольшое количество мусора с обеих сторон по причинам выравнивания.
Действительно ли таких API не существует, или я просто не знаю о них? Я в основном интересуюсь NTFS, но интересны и другие файловые системы.
2 ответа
Раймонд Чен, по сути, ответил на этот вопрос.
Он отвечает, что нет, таких API не существует, потому что на них слишком мало спроса. Раймонд также предлагает использовать разреженные файлы и разбивать блоки, обнуляя их.
Для NTFS и FAT таких API нет. Вы можете обрезать конец файла, но не начало.
Реализация этого нецелесообразна из-за кэширования файловой системы. Большую часть времени люди реализуют слой "поверх" NTFS для поддержки этого.