Мои вопросы: как можно получить смещение диска, если этот файл (очень важный) маленький (менее одного кластера, всего несколько байтов).
В настоящее время я использую эту функцию Windows API:
DeviceIOControl(FileHandle, FSCTL_GET_RETRIEVAL_POINTERS, @InBuffer, SizeOf(InBuffer), @OutBuffer, SizeOf(OutBuffer), Num, Nil);
FirsExtent.Start := OutBuffer.Pair[0].LogicalCluster ;
Он работает отлично с файлами, размер которых превышает размер кластера, но он просто не работает с файлами меньшего размера, поскольку он всегда возвращает нулевое смещение.
Какую процедуру следует выполнять с небольшими файлами? где они находятся на томе NTFS? Есть ли альтернативный способ узнать смещение файла? Эта субтилита нигде не документирована.
Примечание: вопрос помечен как Delphi, но примеры или примеры C ++ также приветствуются.