Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вывести все файлы директории


Автор: Bog d`An 7.8.2005, 08:38
Подскажите пожалуйста
как получить имена (и пути) всех файлов и папок данной директории.
желательно также чтобы рекурсивно вызывалась на найденные папки - той чтобы в результате был список всех вложеных папок и файлов приблизительно в таком виде
{Препарируемый каталог}
{первый подкаталог}
{первый подкаталог первого подкаталога}
первый файл первого подкаталога первого подкаталога
второй файл первого подкаталога первого подкаталога
...
последний файл первого подкаталога первого подкаталога
{второй подкаталог первого подкаталога}
первый файл второго подкаталога первого подкаталога
второй файл второго подкаталога первого подкаталога
...
последний файл второго подкаталога первого подкаталога
первый файл первого подкаталога
второй файл первого подкаталога
...
последний файл первого подкаталога
{второй подкаталог}
первый файл второго подкаталога
второй файл второго подкаталога
...
последний файл второго подкаталога
...
{последний подкаталог}
первый файл последнего подкаталога
второй файл последнего подкаталога
...
последний файл последнего подкаталога
первый файл исходного каталога
второй файл исходного каталога
...
последний файл исходного каталога


зарание спасибо

М
 
Поиск!

Автор: Pakshin A. S. 7.8.2005, 08:49
Тема стара, как мир... smile
Щас ког напишу, чтобы не мучить вас поиском по форуму и факу...
Добавлено @ 08:55
Код

var
 mask: sting;

procedure TFrom1.CreateDirList(path: string);
var
 s1,s2: TSearchRec;
 res: integer;
 function IsDirNotation(ADirName: String): Boolean;
  begin
    Result := (ADirName = '.') or (ADirName = '..');
  end;
begin
 res:=FindFirst(Path + '*.*', faDirectory, s);
 while res = 0 do
  begin
   if ((s.Attr and faDirectory) = faDirectory) and not
        IsDirNotation(s.Name)
    then
     begin
      Memo1.Lines.Add(Path + S.Name);
      CreateDirList(Path + s.name + '\');
     end;
   res:=FindNext(s);
  end;
 FindClose(s);
 res:=FindFirst(Path + Mask, faAnyFile, s);
 while res = 0 do
  begin
   Memo1.Lines.Add(Path + s.Name);
   res:=FindNext(s);
  end;
 FindClose(s);
end;


Типа этого...

Автор: Bog d`An 8.8.2005, 03:23
Спасибо что не послал smile

Автор: s-mike 9.8.2005, 13:07
Я делаю так:
Код

type
  TEnumFileCallBack = function(const FileName: string): Integer of object;

procedure EnumFilesInFolder(const Path, Mask: string;
  const CallBack: TEnumFileCallBack;
  const Attributes: Integer = faAnyFile - faDirectory);
var
  I: Integer;
  F: TSearchRec;
  S: string;
begin
  if (@CallBack = nil) or (not DirectoryExists(Path)) then Exit;

  S := IncludeTrailingPathDelimiter(Path);
  if FindFirst(S + Mask, Attributes, F) = 0 then
  try
    repeat
      if F.Name = '.' then
        FindNext(F)
      else
        if CallBack(S + F.Name) < 0 then Exit;
      I := FindNext(F);
    until I <> 0;
  finally
    FindClose(F);
  end;
end;

procedure EnumFilesInSubdirs(const Path, Mask: string;
  const CallBack: TEnumFileCallBack;
  const Attributes: Integer = faAnyFile - faDirectory);
var
  I: Integer;
  F: TSearchRec;
  S: string;
begin
  if (@CallBack = nil) or (not DirectoryExists(Path)) then Exit;

  S := IncludeTrailingPathDelimiter(Path);
  if FindFirst(S + '*.*', faAnyFile, F) = 0 then
  try
    repeat
      if F.Attr and faDirectory = faDirectory then
        if F.Name = '.' then
          FindNext(F)
        else
          EnumFilesInSubdirs(S + F.Name, Mask, CallBack, Attributes);

      I := FindNext(F);
    until I <> 0;
  finally
    FindClose(F);
  end;

  EnumFilesInFolder(S, Mask, CallBack, Attributes);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)