Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Исходники и статьи
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.01.2012, 19:21
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию Удобный поиск файлов из Findfirst

идея была привести findfirst/next к удобному виду под delphi7

что получилось:
- не надо объявлять ни одной переменной, минимализм
- магическим образом работает рекурсивный поиск в глубину

как это выглядит:
PHP код:
понимает:                                                                                         '
  c:
  c:\                                                                                              
  c:\*
  c:\*.sys
  c:\WINDOWS\system32\**         <<=рекурсивные
  c:\WINDOWS\system32\**\                                                              
  c:\WINDOWS\system32\**\*
  c:\WINDOWS\system32\**\*.dll
  c:\WINDOWS\system32\**\xpssvcs.dll                                                            '


использование:

  
with Files('c:') do
    while 
find do
      
listbox1.Items.Add(filename);

// здесь find, filename, также searchrec - это методы объекта возвращаемого в with
// подходит если надо найти один файл а не собрать в список все
// и если хочется сделать break из такого цикла, то можно вызвать Free тоже, тк в этом случае объект автоматом не освобождается


  // или так
  
listbox1.items.assign(List(Files('c:'))); // но тут лёгкая утечка:> 
Вложения
Тип файла: 7z Finder.7z (2.4 Кбайт, 8 просмотров)

Последний раз редактировалось Pyro, 22.01.2012 в 17:37.
Ответить с цитированием
  #2  
Старый 20.01.2012, 20:38
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Что-то в этом есть, конечно. Однако будет утечка памяти при использовании именно такой конструкции:

Код:
ListBox1.Items.Assign(List(Files('c:\')));                //' 
  ListBox1.Items.Assign(List(Files('c:\*')));  
  ListBox1.Items.Assign(List(Files('c:\*.txt')));  
  ListBox1.Items.Assign(List(Files('c:\windows\**')));      
  ListBox1.Items.Assign(List(Files('c:\windows\**\')));              //'     
  ListBox1.Items.Assign(List(Files('c:\windows\**\*')));      
  ListBox1.Items.Assign(List(Files('c:\windows\**\*.dll')));
Результат List - уничтожать кто будет?
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #3  
Старый 20.01.2012, 21:31
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Сделать, чтоб ф-я интерфейс воротила, будет круто.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 21.01.2012, 09:35
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

чтоб ф-я интерфейс воротила
- с интерфейсами никогда не сталкивался
Результат List - уничтожать кто будет
- вобще надо бы, но так нагляднее

Особенность была:
писал с предположением, что в маске всегда будет звёздочка, поиск по точному имени не работал

Последний раз редактировалось Pyro, 22.01.2012 в 16:43.
Ответить с цитированием
  #5  
Старый 21.01.2012, 16:45
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

http://www.gamedev.ru/community/delp.../use_interface
Не забываем про GUID
P.S. статья хреновинькая, но для начала пойдет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 21.01.2012 в 16:47.
Ответить с цитированием
  #6  
Старый 22.01.2012, 12:22
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
begin
  SendMessage(ListBox1.Handle, LB_DIR, $3f, Integer(PChar('c:\Windows\System32\*.exe'#0)));
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 22.01.2012, 17:12
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

интерфейсы - так и не понял что они дадут

файл обновил, сейчас все тестовые строчки работают как надо, даже рекурсивный поиск по точному имени
если повезёт, сделаю ещё поиск в ширину и поиск по всем дискам (*:\pagefile*, или по другому как-нибудь )
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter