Разница между SEEKDATA и SEEKHOLE при работе с большими файлами заключается в том, что первый возвращает расположение следующего сегмента данных, а второй — следующего промежутка. 13
SEEK_DATA подгоняет файловое смещение к следующему расположению, большему или равному значению offset, по которому в файле есть данные. 3 Если значение offset указывает на данные, то файловое смещение устанавливается в offset. 3
SEEK_HOLE подгоняет файловое смещение к следующему промежутку, большему или равному значению offset. 3 Если значение offset указывает в середину промежутка, то файловое смещение устанавливается в offset. 3 Если перед offset нет промежутка, то файловое смещение подгоняется к концу файла (это скрытый промежуток, который есть в конце любого файла). 3
Таким образом, SEEKDATA ориентирован на данные, а SEEKHOLE — на промежутки, что важно при работе с разреженно выделенными файлами, где промежутки (последовательности нулей) могут храниться более компактно, чем фактические данные. 12