Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.14;
Скачать: CL | DM;

Вниз

Как получить список файлов из MFT?   Найти похожие ветки 

 
JSman ©   (2010-01-12 15:50) [0]

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


 
Riply ©   (2010-01-12 20:37) [1]

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

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

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


 
JSman ©   (2010-01-13 14:25) [2]

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


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


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


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

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


 
Riply ©   (2010-01-13 15:41) [3]

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

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

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

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

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

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


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


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


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


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


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


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


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

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


 
JSman ©   (2010-01-13 16:04) [6]

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


 
JSman ©   (2010-01-13 16:08) [7]

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) [8]

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

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

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


 
Riply ©   (2010-01-13 16:14) [9]

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

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



Страницы: 1 вся ветка

Текущий архив: 2010.03.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1261863022
Юрий
2009-12-27 00:30
2010.03.14
С днем рождения ! 27 декабря 2009 воскресенье


2-1263041766
TRSteep
2010-01-09 15:56
2010.03.14
Динамические массивы в функциях


15-1261697289
DillerXX
2009-12-25 02:28
2010.03.14
А не вспомнит ли кто...


3-1236167363
Zalum
2009-03-04 14:49
2010.03.14
Данные из запроса


4-1230196376
OlegNik
2008-12-25 12:12
2010.03.14
CreateFile