c0f0d5d4

Список кластеров, распределенных файлу


Сначала покажем, как получить список кластеров, распределенных файлу . Вы уже знаете, как получить этот список, пользуясь таблицей размещения файлов и дескриптором файла в каталоге. Сложность здесь заключается в том, что операционная система не предоставляет никакого документированного способа получения номера первого кластера, распределенного файлу. Вам придется последовательно просматривать дерево каталогов до тех пор, пока вы не доберетесь до вашего файла. Для просмотра дерева каталогов вам придется использовать непосредственное чтение диска и таблицу размещения файлов . Лишь найдя нужный вам каталог (содержащий файл, для которого нужно получить список кластеров) и прочитав каталог как файл в память, вы сможете воспользоваться дескриптором файла для определения номера первого кластера, распределенного файлу.

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

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

Напомним, что для каждого открытого файла эта таблица содержит, кроме всего прочего, номер первого кластера, распределенного файлу, и номер кластера файла, к которому только что выполнялось обращение - last_clu.

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

Размер кластера можно получить из BPB , который находится в загрузочной записи диска.



Содержание раздела