Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2009, 19:55   #21
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нет нельзя...
вам уже говорили что обозначают точки, они не нужны вам...и они замкнут рекурсию
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 23:41   #22
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию

До меня дошло всё, кроме вот этой мелочи:

что будет значить эта строчка, если значение SR.Name=123.exe
Код:
FindRes:=FindNext(SR);
Будет искаться следующий файл с этим именем (123.exe [глупость]), или просто тот же файл что ищется в начале поиска(в FindFirst), а в FindNext, параметр SR в скобках тока для порядка? Ну вернее чтобы определять каталог это или файл в ((SR.Name='.')or(SR.Name='..'))
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Старый 16.08.2009, 23:47   #23
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это строчка означает "искать далее"
а SR это запись в которой будет хранится данные о файле найденном
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.08.2009, 08:17   #24
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию :)

Я уловил все закоулки этого алгоритма только вот что до меня доходило дольше всего:



Меня слово "Метка" ввело в заблуждение
Изображения
Тип файла: jpg Иерархическая структура с точки зрения FindFirst(Next).jpg (6.9 Кб, 181 просмотров)
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Старый 17.08.2009, 14:27   #25
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему точки в начале самой идет, а так, молодец

а файлов нет?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.08.2009, 17:36   #26
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

---FISHER---, ну слава Богу! Поздравляю!

p.s. по указанной у Вас схеме не очень наглядно видно..
Просто хочу отметить. служебные папки с именами "." ".."
1) присутствуют в КАЖДОЙ ПАПКЕ (за исключением КОРНЕВОЙ (корневая папка - это имя диска со слешем, например:
C:\ или D:\)
2) служебные папки с именами "." ".." в каждой папке встречаются СТРОГО ОДИН РАЗ.

для иллюстрации рекомендую погонять такой исходник (киньте на форму Memo, Edit и кнопку. На кнопку назначьте код Button1Click) :
Код:
procedure TForm1.FindFile(Dir: string);
var SR: TSearchRec;
  FindRes: Integer;
begin
  FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
  while FindRes = 0 do
  begin
    Memo1.Lines.Add(Dir + SR.Name);
    FindRes := FindNext(SR);
  end;
  FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add('------------- '+Trim(edit1.Text)+'----------');
  FindFile(Trim(edit1.Text));
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.08.2009, 18:53   #27
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию Готов поиск файлов

Вот короче, в этом коде АБСОЛЮТНО ничего нового, но зато он полностью мне понятен и немножко видоизменен мной

Теперь такой вопрос встал: каким образом заставить программу что-либо, во время этого самого перебора файлов, делать? А то она полностью останавливается и как будто весит (все результаты показывает исключительно после окончания перебора). Подскажите пожалуйста

А вот код, не судите за возможно кривое написание если есть черьезные неточности или ошибки, сообщите пожалуйста а так она полностью рабочая, правда ищет пока только файлы

Код:
procedure TForm1.FindFile(Text:String; Atr:integer; search:string);
Var SR:TSearchRec; 
    FindRes:Integer; 
begin 
FindRes:=FindFirst(Text+'*.*', atr ,SR);
While FindRes=0 do
   begin
      if ((SR.Attr and faDirectory)=faDirectory) and 
      ((SR.Name='.')or(SR.Name='..')) then 
         begin 
            FindRes:=FindNext(SR); 
            Continue; 
         end; 
      if ((SR.Attr and faDirectory)=faDirectory) then 
         begin
            Edit2.Text:=SR.Name;
            FindFile(Text+SR.Name+'\', atr, search);
            FindRes:=FindNext(SR); 
            Continue; 
         end;
      Edit2.Text:=SR.Name;
      If SR.Name = search then ListBox1.Items.Add(Text + SR.Name);
      FindRes:=FindNext(SR);
   end;
FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var Text: string;
search: string;
i:integer;
atr: integer;
begin
If CheckBox1.Enabled= true then atr:= atr + $00000002 + $00000004;
If CheckBox2.Enabled= true then atr:= faAnyFile;
search:=Edit1.Text;
Text:= Combobox1.Text;
If Text='Локальный диск (C:\)' then Text:= 'C:\';
If Text='Локальный диск (D:\)' then Text:= 'D:\';
If Text='Мои документы' then Text:= 'C:\Documents and Settings\123\Мои документы\';
If Text='Мои рисунки' then Text:='C:\Documents and Settings\123\Мои документы\Мои рисунки\';
Timer1.Enabled:=True;
FindFile(Text, atr, search);
Timer1.Enabled:=False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
If ProgressBar1.Position <> 100 then
begin
ProgressBar1.Position:=ProgressBar1.Position + 1;
end else
begin
ProgressBar1.Position:=0;
end;
end;//таймер вообще не подает признаков жизни во время перебора

end.
Вложения
Тип файла: rar Поиск файлов.rar (437.2 Кб, 5 просмотров)
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Старый 17.08.2009, 19:43   #28
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

А таймер у Вас включен?
psycho-coder вне форума Ответить с цитированием
Старый 17.08.2009, 20:09   #29
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Он и не будет "живым" по причине того, что ты в той же процедуре отключаешь его, ведь во время поиска дельфи не переключится на исполнение таймера (проверь с помощью F7, если не веришь), для этого нужен другой поток
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 17.08.2009, 20:40   #30
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию

Вот вот поток...подскажите на примере как это реализовать
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Поиск файлов profi Помощь студентам 2 16.06.2009 16:04
Поиск файлов hacknet Общие вопросы Delphi 23 24.11.2008 17:54
Поиск файлов LeoN Общие вопросы Delphi 5 25.11.2007 22:54
поиск файлов KORN Компоненты Delphi 3 12.10.2007 05:42