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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.06.2008, 22:22
Аватар для timeless
timeless timeless вне форума
Прохожий
 
Регистрация: 27.06.2008
Сообщения: 36
Репутация: 12
По умолчанию Список файлов в ListBox, надо модифицировать код

Задача состоит в том чтобы считать список имен файлов нескольких разных типов в ListBox.

В интернете нашел такой код:
Код:
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;

Используется так:
Код:
ScanDir(<путь>,'',ListBox1.Items);

Но эта процедура вместе с адресами файлов заносит в ListBox еще и адреса папок, что мне не нужно. К тому же она позволяет использовать только одну маску.

Как сделать чтобы в ListBox заносились только адреса файлов, пропуская папки? И как изменить код чтобы использовать несколько масок?

Я новичок в программировании, поэтому хотелось бы рассчитывать на подробный ответ, если это возможно.
Ответить с цитированием
  #2  
Старый 27.06.2008, 23:22
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
Подмигивание

удали, будет без папок..
Код:
List.Add(StartDir + SearchRec.Name)
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
  #3  
Старый 27.06.2008, 23:46
Аватар для timeless
timeless timeless вне форума
Прохожий
 
Регистрация: 27.06.2008
Сообщения: 36
Репутация: 12
По умолчанию

Получилось наоборот: без файлов =)
Ответить с цитированием
  #4  
Старый 28.06.2008, 09:11
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

ой , пардон, поспешил вчера . вот готовый код:

Код:
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;

почитай хэлп - поймёшь почему я эту строку в комментарии отправил
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
  #5  
Старый 28.06.2008, 14:09
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
Счастье

По большому счёту можно и вообще по другому написать.. более кратко и красиво, но ты просил модифицировать
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
  #6  
Старый 29.06.2008, 02:27
Аватар для timeless
timeless timeless вне форума
Прохожий
 
Регистрация: 27.06.2008
Сообщения: 36
Репутация: 12
По умолчанию

Спасибо большое! Я попросил модифицировать потому что думал, что так отниму меньше времени у знающего человека .
Так что делать, если надо использовать несколько масок (скорее всего из ini файла, но с этим проблем быть не должно)?
Есть вариант прогнать процедуру несколько раз а затем сортировать список, но это мне кажется не очень рациональным решением.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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