Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1152480645
PhillipJFry
2006-07-10 01:30
2006.07.30
Помогите с запросом!!


6-1142512145
Новочеркасский Волк
2006-03-16 15:29
2006.07.30
Виновата ли ADSL или в чём ошибка???


1-1150537672
МикроДИП
2006-06-17 13:47
2006.07.30
Вопрос по компоненту Chart (TChart)...


3-1148477220
p_evghenii
2006-05-24 17:27
2006.07.30
Группировка запроса по датам


15-1151390965
Иксик
2006-06-27 10:49
2006.07.30
Идиотский вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский