Высокоэффективные API-интерфейсы файловой системы для определенных видов операций - PullRequest
0 голосов
/ 24 мая 2010

Иногда мне нужны определенные API-интерфейсы файловой системы, которые могут быть реализованы очень эффективно, если они поддерживаются файловой системой, но я никогда о них не слышал. Например:

  • Усеченный файл с начала, на границе единицы размещения
  • Разделить файл на две части на границе единицы размещения
  • Вставить или удалить фрагмент из середины файла, опять же, на границе единицы размещения

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

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

Это действительно так, что таких API не существует, или я просто не знаю о них? В основном я интересуюсь NTFS, но интересны и другие файловые системы.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

Раймонд Чен по существу ответил на этот вопрос .

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

0 голосов
/ 24 августа 2010

Для NTFS и FAT таких API нет.Вы можете обрезать конец файла, но не начало.

Реализация этого нецелесообразна из-за кэширования файловой системы.Большую часть времени люди реализуют слой «поверх» NTFS для поддержки этого.

...