Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
qwerty1 Гость
|
Добавлено: Вт Апр 13 2004 10:48 Заголовок сообщения: FindFirst |
|
|
У меня в программе необходимо выполнять поиск файлов.
При использовании FinFirst и т.д. функций прога (если поиск долгий) полностью "виснет", не отрисовывается и т.д. Можете что-нибудь посоветовать как лучше всего производить поиск на жесткои диске?
Программа на Дельфи (или Билдере, что одинаково). |
|
Вернуться к началу |
|
|
JibSkeart
Зарегистрирован: 13.04.2004 Сообщения: 12 Откуда: Из далекой галактики
|
Добавлено: Вт Апр 13 2004 16:37 Заголовок сообщения: Re: FindFirst |
|
|
выполнить процедуру в новом процессе/нити
есть примеры в exemples
ну а я могу вам предложить только
свой вариант на BCB++
class TFindFile : public TThread
{
private:
AnsiString FFindFile;
public:
__fastcall TFindFile(AnsiString FileName):TThread(true)
{
FFileName = FileName;
}
void __fastcall FindFiles()
{
// сдесь ищем файл название его допустим в переменной FFileName
};
virtual void __fastcall Execute(void)
{
try
{
Synchronize(FindFiles);
}
catch(Exception &e)
{
ShowMessage("Ошибка "+ e.Message);
}
}
};
Юзаем
TFindFile * FFiles new = TFindFile("test.txt");
все, как обьект FFiles создался метод Execute автоматически выролняется,
за дополнениеми читайте хелп, смотрие примеры. _________________ -=JS=- |
|
Вернуться к началу |
|
|
SilverBlood Гость
|
Добавлено: Вт Апр 13 2004 21:10 Заголовок сообщения: |
|
|
для поиска файлов в директории dir по маске mask:
procedure SearchInDir(Mask, Dir: string; Subdir: Boolean; list: tstrings);
var
r: integer;
f: TSearchRec;
begin
if Dir = '' then Exit;
if Dir[Length(Dir)] <> '\' then Dir := Dir + '\';
{$I-}
ChDir(Dir);
{$I+}
if IOResult <> 0 then Exit;
r := FindFirst('*.*', faAnyFile, f);
while r = 0 do
begin
if MatchesMask(f.Name, Mask) then
if (f.Name <> '.') and (f.Name <> '..') then
list.add(ExpandFileName(f.Name));
if (f.Attr and faDirectory) = faDirectory then
if SubDir = True then
begin
if (f.Name <> '.') and (f.Name <> '..') then
begin
SearchInDir(Mask, ExpandFileName(f.Name), SubDir; list );
ChDir(Dir);
end;
end;
r := FindNext(f);
end;
FindClose(f);
end; |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Пт Апр 16 2004 19:59 Заголовок сообщения: |
|
|
Возможно, поможет application.processmessages, вставленная внутрь цикла. |
|
Вернуться к началу |
|
|
|