Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить список файлов из MFT? [D7, XP]


JSman ©   (2010-01-12 15:50:00) 

Здравствуйте! Стоит задача написать быстрый поиск файлов. Обход файловой системы по директориям хотел бы заменить более скорым способом: получить напрямую список файлов из MFT. Возможно ли получить список из MFT? Буду рад услышать и альтернативные варианты перебора файлов. Заранее благодарю!


Riply   (2010-01-13 16:14:00) [1]

> [7] JSman ©   (13.01.10 16:08)

Microsoft`цы оказывается тоже :)


JSman   (2010-01-13 16:08:00) [2]

NTFS File Attributes

The NTFS file system views each file (or folder) as a set of file attributes. Elements such as the file's name, its security information, and even its data, are all file attributes. Each attribute is identified by an attribute type code and, optionally, an attribute name.

When a file's attributes can fit within the MFT file record, they are called resident attributes. For example, information such as filename and time stamp are always included in the MFT file record. When all of the information for a file is too large to fit in the MFT file record, some of its attributes are nonresident. The nonresident attributes are allocated one or more clusters of disk space elsewhere in the volume. NTFS creates the Attribute List attribute to describe the location of all of the attribute records.

http://www.ntfs.com/ntfs-files-types.htm


Riply   (2010-01-13 16:08:00) [3]

> [4] Игорь Шевченко ©   (13.01.10 15:56)

> Куда дели ? Файл 0.
Угу. Неудачно выразилась. $MFT, разумеется существует.

> Имя файла обычно резидентный атрибут.
Это так. Но если нам надо получить список объектов, "содержащихся" в данном,
то с большой долей вероятности, мы столкнемся с нерезидентными атрибутами.
P.S.
Линуксоиды утверждают, что имя объекта всегда резидентно.


JSman   (2010-01-13 16:04:00) [4]

Информацию по MFT отсюда http://www.ntfs.com/ntfs-mft.htm


JSman   (2010-01-13 16:02:00) [5]


> Нет. Я имела ввиду использование ф-ий типа NtQueryDirectoryFile

Теперь я Вас понял. Спасибо огромное за полный ответ!


Игорь Шевченко   (2010-01-13 15:56:00) [6]


> Не существует такого файла, как MFT


Куда дели ? Файл 0.


> Дело в том, что FILE_RECORD может содержать не резидентные
> атрибуты (не сидящие в самой MFT)
>   и нам придется считывать те куски, где они реально находятся.
>


Имя файла обычно резидентный атрибут.


Riply   (2010-01-13 15:41:00) [7]

> [2] JSman ©   (13.01.10 14:25)
> Вы имеете в виду, что мне следует ограничиться FindFirstFile и FindNextFile?

Нет. Я имела ввиду использование ф-ий типа NtQueryDirectoryFile

> Все-таки думаю проверить: мне показалось, что быстрее прочитать один файл, чем работать с деревом,
> тем более, что интересуют только имена файлов.

Прочитать один файл не получиться, ибо:
1. Не существует такого файла, как MFT (это только кусочек(ки) диска, рассматриваемого как файл)
2. Даже сели мы считаем этот  кусочек(и), то данных нам будет недостаточно.
  Дело в том, что FILE_RECORD может содержать не резидентные атрибуты (не сидящие в самой MFT)
  и нам придется считывать те куски, где они реально находятся.

> Не могли бы показать Ваш код? Мне бы это было очень полезным.

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


JSman   (2010-01-13 14:25:00) [8]

@ Riply, спасибо Вам за ответ!


> Можно ускорить процесс, работая с Native ф-ми.


Вы имеете в виду, что мне следует ограничиться FindFirstFile и FindNextFile?


> Но, скорее всего, игра не будет стоить свеч.
> (Во всяком случае у меня так получалось. Правда я не гналась за скоростью)

Все-таки думаю проверить: мне показалось, что быстрее прочитать один файл, чем работать с деревом, тем более, что интересуют только имена файлов. Хотя, возможно Вы правы. Не могли бы показать Ваш код? Мне бы это было очень полезным.


Riply   (2010-01-12 20:37:00) [9]

> [0] JSman ©   (12.01.10 15:50)
> Здравствуйте! Стоит задача написать быстрый поиск файлов

Можно ускорить процесс, работая с Native ф-ми. (от 20% на неиндексированном диске до 50% - на индексированном)

> Возможно ли получить список из MFT?
Возможно.
Но, скорее всего, игра не будет стоить свеч.
Реализация довольно трудоемка, а выигрыш незначителен (если вообще будет).
(Во всяком случае у меня так получалось. Правда я не гналась за скоростью)


Наверх

Титульная страница Поиск, карта сайта Написать письмо