Да там и комментировать особо нечего, код говорит сам за себя. Названия основных переменных вполне "говорящие", описание вызываемых функций и их аргументов легко ищется в msdn, так что тут даже книжек по С++ не нужно - тут практически голый WinAPI, вот его и нужно изучать.
И да, подозреваю, что GetFileClusters() не рабочая из-за того, что кто-то закомментировал куски кода.
starkdm: Для начинающего вы взялись за слишком низкоуровневую задачу. В таких задачах нужно чётко понимать что и зачем делается, чтобы потом небыло мучительно больно. К примеру, эта функция что возвращает кластеры, может не сработать на NTFS и мелких файлах, т.к. они могут храниться прямо в MFT и такие нюансы надо учитывать.
starkdm: Она копирует файл, что следует из названия функции. Но копирование происходит именно по кластерам и вы можете легко модифицировать эту функцию, чтобы она вместо ReadFile делала WriteFile для нужных кластеров.
Последние 4 инструкции нужны только для отрицательных чисел. Я выкинул проверку на отрицательное число, если хотите максимального быстродействия, допишите её самостоятельно.
function shr64(value: Int64; shift: LongInt): Cardinal;
begin
Result := Value shr Shift;
if (Value and $8000000000000000) > 0 then
Result := Result and ($FFFFFFFF shr Shift);
end;
>Другого способа просто нет.
Вернее, есть ещё один способ, но он совершенно не "портабелен" - прописать путь в настройках самой Delphi: Tools - Options - Delphi Options - Library - Library Path. И там уже прописывается либо абсолютный путь, либо путь относительно папки с установленной Delphi (используется переменная $(BDS)).
Interface: Путь сохраняется в файле проекта *.dproj, соответственно его нужно прописывать для каждого проекта в отдельности. Другого способа просто нет.
И да, подозреваю, что GetFileClusters() не рабочая из-за того, что кто-то закомментировал куски кода.