Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Система поиска глючит! [D7, WinME]


DreYmanD ©   (2004-07-03 15:12:00) 

Привет всем мастерам!
Хочу в своей проге использовать систему поиска. Объясню поконкретней:
я нажимаю на Button1 и в обработчике пишу:

procedure TForm1.Button1Click(Sender: TObject);

var  SearchRec: TSearchRec;

begin
FindFirst('c:\sasha\temp\*.txt', faAnyFile, SearchRec); \\Директория и формат файла, где будет происходить поиск
Form1.ListBox1.Items.Add(SearchRec.Name); \\Добавление файлов в ListBox
Form1.Label3.Caption:='Поиск завершен'; \\Надпись, которая появится после поиска
end;

Дело в том, что он находит только один файл и после повторного нажатия на Буттон1, в ЛистБоксе записывается тот же файл.
Какой мне надо дописать кусок кода, чтобы он находил в этой директории АБСОЛЮТНО все файлы данного формата? И еще, он у меня
опять же не хочет добавлять в ЛистБокс файлы из Windows\Temporary Internet Files....

Заранее спасибо!


DreYmanD   (2004-07-03 23:12:00) [1]

Обращение к Vasya.ru - спасибо, попробую...
Обращение к Cardinal - тоже спасибо, все опробую...
Обращение к ЮрийК - вообще не писал...
Короче, все опробую, о результатах напишу...
Спасибо!


ЮрийК   (2004-07-03 21:41:00) [2]

"Я всего лишь неделю за Delphi сижу"

А раньше на чём писали?


Cardinal   (2004-07-03 21:28:00) [3]

DreYmanD   (03.07.04 17:03) [6]

Функция у нас объявлена так:

procedure ScanDir(StartDir: string; Mask:string; List:TStrings);

ScanDir - строка, содержащая адрес директории, где надо искать
Mask    - строка с маской, по которой надо искать файлы
List    - объект типа TStrings, в который надо добавлять список
         файлов

Для вашего случая:
ScanDir('C:\Windows\Temporary Internet Files\','*.txt',Listbox1.Items);
Если что не понятно, пишите


Vasya.ru   (2004-07-03 17:10:00) [4]

procedure GetDir(dir:string;list:tlistbox);
var
sr:tsearchrec;
begin
if findfirst(dir+'\*.*',faanyfile,sr)=0 then
begin
list.Items.Add(sr.Name);
while findnext(SR)=0 DO
list.Items.Add(sr.Name);
END;
findclose(sr);
end;
//example
procedure TForm1.Button1Click(Sender: TObject);
begin
getdir('c:\windows',listbox1);
end;

Кто то из местных давал пол года назад.
Для поиска по расширению либо запиши расш. в код (if findfirst(dir+'\*.СЮДА ПИШИ РАСШИРЕНИЕ',faanyfile,sr)=0 then)
Либо измени функцию:
procedure GetDir(dir:string;list:tlistbox; Rash : String);
...
(if findfirst(dir+'\*.' + RASH,faanyfile,sr)=0 then)
...
Вроде понятно все написал...


DreYmanD   (2004-07-03 17:03:00) [5]

Обращение к Menart и Cardinal.

Слушайте, не поможете мне разобраться с этим кодом? Я всего лишь неделю за Delphi сижу....
Мне надо, чтобы после нажатия на Буттон1 искались файлы в той директории, которая записана в системном коде.
В моем случае 'C:\Windows\Temporary Internet Files\*.txt' Чтобы система нашла все файлы данного формата и записала их в ListBox....
Я вот еще думаю: появятся ли эти файлы в ЛистБоксе(это же Cookie), т.к. у меня это до этого не получалось(см. как я делал на самом верху).


Cardinal   (2004-07-03 16:00:00) [6]

Кстати, у меня тоже есть этот код, только немного преобразованный


DreYmanD   (2004-07-03 15:57:00) [7]

Ну ладно, попробую использовать...


menart   (2004-07-03 15:53:00) [8]

давненько это было, я этот код сам использовал, поделился с тобой :)
этот код приводил как пример Anatoly Podgoretsky


DreYmanD   (2004-07-03 15:30:00) [9]

А не можешь дать ссылку, где ты это нашел?


menart   (2004-07-03 15:20:00) [10]

procedure ScanDir(StartDir: string; Mask:string; List:TStrings);
var
  SearchRec : TSearchRec;
begin
  if Mask = '' then Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
  StartDir := StartDir + '\';
if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
begin
repeat
Application.ProcessMessages;
if (SearchRec.Attr and faDirectory) <> faDirectory then
   List.Add(StartDir + SearchRec.Name)
else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
begin
List.Add(StartDir + SearchRec.Name + '\');
ScanDir(StartDir + SearchRec.Name + '\',Mask,List);
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;


вроде так...
этот код я нашел здесь на этом сайте, просто надо было сначала поискать потом задавать вопросы


Наверх

Титульная страница Поиск, карта сайта Написать письмо