Подтвердить что ты не робот

Как определить степень фрагментации файла?

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

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

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

4b9b3361

Ответ 1

Вы можете использовать DeviceIoControl с помощью FSCTL_GET_RETRIEVAL_POINTERS управляющий код.

Операция FSCTL_GET_RETRIEVAL_POINTERS извлекает переменный размер структура данных, которая описывает распределение и местоположение на диске конкретный файл. Структура описывает сопоставление между виртуальными номера кластеров (смещения VCN в файле или пространстве потока) и номера логических кластеров (смещения LCN в объемном пространстве).