![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сканирование папок и файлов в потоке [D7, WinXP]
Sergey_R © (2005-10-19 12:12:00)Подскажите, пожалуйста, как реализовать добавление файлов из определенной папки (включая вложенные) в потоке. Мне нужно выводить количество уже найденных файлов на какую-нибудь форму. С выводом вроде понятно, как сделать. А вот как засунуть эту функцию в поток?
procedure FindAllFiles(List: TStrings; Dir, Mask: string);
procedure ScanDir(Dir: string);
var SR: TSearchRec;
begin
Dir := IncludeTrailingBackSlash(Dir);
if FindFirst(Dir + '*.*', faAnyFile - faVolumeID, SR) = 0
then
try
repeat
if (SR.Name <> '.') and (SR.Name <> '..') then
if SR.Attr and faDirectory <> 0
then ScanDir(Dir + SR.Name)
else if MatchesMask(SR.Name, Mask) then
begin
List.Add(Dir + SR.Name);
inc(kol);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
begin
if (List = nil) or not DirectoryExists(Dir) or (Mask = '') then
raise Exception.Create('Invalid parameter');
ScanDir(Dir)
end;
переменная kol в данном случае объявлена глобально, и именно её мне нужно куда-нибудь вывести. Пробовал создать поток, куда вставил эти процедуры, но Synchronize почему-то доступно только в Thread.Execute!
Sergey_R (2005-10-19 13:31:00) [1]2 clickmaker
Спасибо! Оказалось, что просто надо прописать в классе потока нужную функцию и Synchronize заработал!
Digitman (2005-10-19 12:36:00) [2]
> как засунуть эту функцию в поток?
ну как ты обычно "суешь", так и "засунь".
или призадумайся. что и зачем "суешь" ...
clickmaker (2005-10-19 12:29:00) [3]
> Synchronize почему-то доступно только в Thread.Execute!
она доступна из любого метода потока