Консультация № 144833
24.09.2008, 01:23
0.00 руб.
0 2 2
Здравствуйте эксперты!
На диске есть несколько папок. В каждой из этих папок могут быть еще папки. Также в каждой папке есть несколько файлов. Нужно сформировать список всех файлов на диске. (И добавить его например в ListBox).
Всем заранее спасибо за ответы!

Обсуждение

Неизвестный
24.09.2008, 02:06
общий
27.09.2008, 14:01
это ответ
Здравствуйте, Иван Левченко!

Вызов указанной в приложении функции:

Код:
ScanFiles('C:\');


А уж алгоритм добавления в ListBox придётся вам самим реализовывать. [Вырезано]

Приложение:
procedure ScanFiles(SrcDir: string);
var
i: integer;
SearchRec: TSearchRec;
sFileName: string;
begin
if SrcDir = '' then Exit;
if SrcDir[Length(SrcDir)] <> '\' then SrcDir := SrcDir + '\';
if FindFirst(SrcDir + '*.*', faAnyFile, SearchRec) <> 0 then Exit;
repeat
Application.ProcessMessages;
if AbortClose then Break;
if ((SearchRec.Attr and faDirectory) <> faDirectory) then
begin
//Найден очередной файл
for i := 0 to 0 do
begin
SetCurrentDirectory(PChar(SrcDir));
// Это полный путь найденного файла
sFileName := SrcDir + SearchRec.Name;
... Здесь организуете сами код добавления в ListBox
end;
end else
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
begin
//Найдена ещё директория или поддиректория
ScanFiles(SrcDir + SearchRec.Name + '\');
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
Неизвестный
24.09.2008, 07:51
общий
это ответ
Здравствуйте, Иван Левченко!
В приложении - функция для работы с папками (включая подпапки) и записи в список.
Использование:
FindFiles(dir, '*.doc', ListBox1.Items, true);
где dir - основной каталог
'*.doc' - фильтр ('*.*' - для всех файлов)
true - признак поиска в подкаталогах.

Приложение:
procedure FindFiles(StartFolder, Mask: string; List: TStrings; ScanSubFolders: Boolean = True);
var
SearchRec: TSearchRec;
FindResult: Integer;
begin
List.BeginUpdate;
try
StartFolder := IncludeTrailingBackslash(StartFolder);
FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
try
while FindResult = 0 do
with SearchRec do
begin
if (Attr and faDirectory) <> 0 then
begin
if ScanSubFolders and (Name <> '.') and (Name <> '..') then
FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
end
else
begin
if MatchesMask(Name, Mask) then
List.Add(StartFolder + Name);
end;
FindResult := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
finally
List.EndUpdate;
end;
end;
Форма ответа