Форум: "WinAPI";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизПолучить список файлов для 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c