![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Задача состоит в том чтобы считать список имен файлов нескольких разных типов в 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
|
||||
|
||||
|
удали, будет без папок..
Код:
List.Add(StartDir + SearchRec.Name) |
|
#3
|
||||
|
||||
|
Получилось наоборот: без файлов =)
|
|
#4
|
||||
|
||||
|
ой , пардон, поспешил вчера
. вот готовый код:Код:
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;почитай хэлп - поймёшь почему я эту строку в комментарии отправил |
|
#5
|
||||
|
||||
|
По большому счёту можно и вообще по другому написать.. более кратко и красиво, но ты просил модифицировать
![]() |
|
#6
|
||||
|
||||
|
Спасибо большое! Я попросил модифицировать потому что думал, что так отниму меньше времени у знающего человека
.Так что делать, если надо использовать несколько масок (скорее всего из ini файла, но с этим проблем быть не должно)? Есть вариант прогнать процедуру несколько раз а затем сортировать список, но это мне кажется не очень рациональным решением. |