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

Вниз

Получить список файлов для NTFS раздела   Найти похожие ветки 

 
sally   (2006-04-11 19:53) [0]

Как наиболее быстрым способом получить список файлов для NTFS раздела? Знаю, что можно не скнирую весь диск(FindFirst\FindNext).
Поизучав некоторые программы понял что рыть надо в сторону FSCTL_GET_NTFS_VOLUME_DATA и FSCTL_GET_NTFS_FILE_RECORD. Если можно то с примером.


 
Gero ©   (2006-04-12 01:05) [1]

FindFirst\FindNext достаточно быстры.


 
sally   (2006-04-12 10:42) [2]

Если глянуть на ту скорость, с которой стандартный виндовый дефрагментатор анализирует раздел NTFS, то FindFirst\FindNext просто никакие по сравнению с ним.


 
Игорь Шевченко ©   (2006-04-12 10:54) [3]


> то FindFirst\FindNext просто никакие по сравнению с ним.


Результаты сравнений с временными характеристиками - в студию.


 
Sally   (2006-04-12 11:14) [4]

Раздел:  тип - NTFS, объем - 45ГБ, занято - 36 ГБ, кол-во файлов - 220 000
Windows - 8-10 секунд
FindFirst\FindNext - 45 секунд

Исходный код
procedure BuildFileList(const APath: PAnsiChar);
var
 AFileHandle: THandle;
 AFindFileData: TWin32FindData;
 AFileName: string;
begin
 AFileHandle := FindFirstFile(PAnsiChar(APath + "*"), AFindFileData);
 if AFileHandle <> INVALID_HANDLE_VALUE then
 try
   repeat
     if AFindFileData.cFileName[0] = "." then Continue;
     AFileName := string(APath) + AFindFileData.cFileName;
     if (AFindFileData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
         BuildFileList(PAnsiChar(AFileName + "\"));
   until not FindNextFile(AFileHandle, AFindFileData);
 finally
   Windows.FindClose(AFileHandle)
 end
end;


 
Poirot ©   (2006-04-12 19:49) [5]

А принцып можно в студию тоже?!


 
sally   (2006-04-13 17:46) [6]

>Poirot
принцып ЧЕГО???


 
Poirot ©   (2006-04-13 17:53) [7]

Измерения!!! Просто так на глазик или под дебагом или ещё как?!
ИМХО утверждения весьма и весьма голословное.
Цифры есть, но откуда они взяты?!
Хотелось бы увидеть полный отчёт по выполнению вашего кода и того, что вы назвали Windows... 8-10 это как? знавал я одних товарисчей которые секунды считали про себя и вместо 5 реальный они до 15 насчитывали :)
Есть много профайлеров - попробуйте им... мб и сами увидите где собака порылась...
Вообще то, вы меряете не только код FindFirstFile и т.п., а ещё туеву кучу дополнительного специфичного барахла :)


 
Sally   (2006-04-13 17:58) [8]

8-10: Это означает, что проводилось несколько раз. Замерялось секундомером.
FindFirst\FindNext:
 никакого другого кода я не использовал нигде. Кроме разве, что следующего

procedure Form1.Button1Click(Sender: TObject);
var
 AStart: TDateTime;
begin
 AStart := Now;
 BuildFileList("D:\");
 Caption := FormatDateTime("nn:ss:zzz", Now - AStart);
end;


 
Игорь Шевченко ©   (2006-04-13 18:31) [9]


> Если можно то с примером


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

http://www.sysinternals.com/FileAndDiskUtilities.html

И здесь

http://www.sysinternals.com/Information/DiskDefragmenting.html


 
sally   (2006-04-13 18:48) [10]

>Игорь Шевченко
Спасибо, это я уже излазил.
Но интересующего вопроса там нет...


 
Игорь Шевченко ©   (2006-04-14 00:37) [11]

sally   (13.04.06 18:48) [10]

Мне думается, что дефрагментатор вряд ли пользуется подобными вызовами, скорее он читает метафайлы NTFS, а вот к ним он может обращаться подобным способом, впрочем, могу ошибаться.

Еще могу сказать, что метаданные NTFS довольно неплохо описаны у Гэри Неббета.



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

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

Наверх




Память: 0.49 MB
Время: 0.041 c
2-1152547267
Unknowing
2006-07-10 20:01
2006.07.30
Delphi+ Excel


2-1152392627
privet
2006-07-09 01:03
2006.07.30
кнопошки


4-1144974998
Denis_Ac
2006-04-14 04:36
2006.07.30
BITS ( Background Intelligent Transfer Service)


9-1132456729
s3m
2005-11-20 06:18
2006.07.30
Как выводить трекерские файлы через GLScene?


15-1151833354
kaif
2006-07-02 13:42
2006.07.30
Расшифрована структура энзима, вызывающего рак