Re[7]: Остановить выполнение DeviceIoControl
От: MShura  
Дата: 01.04.07 18:51
Оценка:
MS>>Можно двигать только часть файла.
MS>>StartingVcn — это и есть смещение этой части относительно начала файла.

MS>>Пусть файл занимает 13 кластеров.

MS>>Указываешь StartingVcn = 0, ClusterCount = 5. Двигаешь в свободное место
MS>>Указываешь StartingVcn = 5, ClusterCount = 5. Двигаешь в свободное место
MS>>Указываешь StartingVcn = 10, ClusterCount = 3. Двигаешь в свободное место

SO>я тут читал и у меня появилося вопрос:

SO>-а если файл который мы перемещаем большой и все кластеры раскиданы по винту групами, то как их перемещать? как узнать сколько кластеров в групе?
SO> имея:
SO>2*number of extents array — the vcn and the lcn as pairs

На приведенном выше примере все 13 кластеров могут быть в одной группе. А с помощью FSCTL_MOVE_FILE мы эту группу можем частями перенести в другое место. Нет никакой необходимости работать целиком с группой.

Посмотрите MSDN к FSCTL_GET_RETRIEVAL_POINTERS
Если вам вернули три группы


ExtentCount = 3;
StartingVcn = AAA;
//             NextVcn  Lcn
Extents[0]  = { BBB,    666 }
Extents[1]  = { CCC,    777 }
Extents[2]  = { EEE,    888 }


То группы кластеров на диске это

- [666, 666+BBB-AAA)
- [777, 777+ССС-BBB)
- [888, 888+EEE-CCC)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.