Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2021, 22:57   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Список папок в папке

Итак... Как получить список папок в папке? И вывести их в Мемо
Уже долго ищу, не могу найти нигде

Нужны только папки. Без файлов в них
Kronos913 вне форума Ответить с цитированием
Старый 11.02.2021, 00:28   #2
Viktor61
Пользователь
 
Регистрация: 05.05.2018
Сообщений: 92
По умолчанию

Код:
var
  searchResult : TSearchRec;
begin
  if FindFirst('*', faDirectory, searchResult) = 0 then
  begin
    repeat
      // Показываем только каталоги
      if (searchResult.attr and faDirectory) = faDirectory
      then Memo1.Lines.Add(searchResult.Name);
    until FindNext(searchResult) <> 0;

    // Надо освободить ресурсы, используемые этими успешными, поисками
    FindClose(searchResult);
  end;
end
Учесть и преобразовать, если в Мемо не запишется searchResult.Name тип
TSearchRec = record
Time : Integer;
Size : Integer;
Attr : Integer;
Name : TFileName;
ExcludeAttr : Integer;
FindHandle : THandle;
FindData : TWin32FindData;
end;
Viktor61 вне форума Ответить с цитированием
Старый 11.02.2021, 01:23   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Сугубо методом тыка из шаблона для поиска файлов сделал вот такой код
Кто поопытнее, можете проверить, правильно все тут? Какие могут быть "подводные камни" у такой конструкции?

Код:
procedure TForm1.DirSearch1(Dir: string);
var
   SearchRec: TSearchRec;
   i:longint;
   a:boolean;
const
   Mask='.';
begin
   memo1.lines.clear;
   Dir := IncludeTrailingBackslash(Dir);
   if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then


     repeat
       Application.ProcessMessages;

       
       if (faDirectory=0) and (SearchRec.Attr=0) then begin
         if (SearchRec.name<>'.') and (SearchRec.name<>'..') then
                 DirSearch(Dir + SearchRec.name, Mask, Memo1.Lines)
       end
       else
         
          If not(SearchRec.Name='.') and not(SearchRec.Name='..') then begin
            a:=true;
            i:=0;
            while i<memo1.Lines.Count do begin
             If (Dir + SearchRec.Name)<memo1.Lines[i] then begin
               Memo1.Lines.Insert(i, (Dir + SearchRec.Name));
               a:=false;
               i:=memo1.Lines.Count;
             end;
             inc(i);
            end;
            if a then Memo1.Lines.Add(Dir + SearchRec.Name);

          end;


     until FindNext(SearchRec)<>0;
   FindClose(SearchRec);
end;

Последний раз редактировалось Kronos913; 11.02.2021 в 13:31.
Kronos913 вне форума Ответить с цитированием
Старый 11.02.2021, 12:08   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Тут он список всех файлов выдаст, а не только папок. При этом пройдет рекурсивно по всем подпапкам. По задачи не ясно, надо ли углубляться дальше в дерево каталогов?
Arigato вне форума Ответить с цитированием
Старый 11.02.2021, 12:11   #5
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

а не заменить ли для поиска папок параметр faAnyFile на другой? например, faDirectory?
---------------
faAnyFile: Любой файл
faReadOnly: Файлы nолько для чтения
faHidden: Скрытые файлы
faSysFile: Системные файлы
faVolumeID: файлы идентификатора объема
faDirectory: Файлы каталоги
faArchive: Архивные файлы
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 11.02.2021, 13:13   #6
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Тут он список всех файлов выдаст, а не только папок. При этом пройдет рекурсивно по всем подпапкам. По задачи не ясно, надо ли углубляться дальше в дерево каталогов?
Отредактировал сообщение. Не ту процедуру с программы вставил первый раз
Оно еще почему-то в каком-то рандомном порядке выводит список, что нужен дополнительный алгоритм сортировки по алфавиту

Касательно задачи - только список ближайших папок. Без вложенных в них

Последний раз редактировалось Kronos913; 11.02.2021 в 13:39.
Kronos913 вне форума Ответить с цитированием
Старый 11.02.2021, 22:02   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Оно еще почему-то в каком-то рандомном порядке выводит список, что нужен дополнительный алгоритм сортировки по алфавиту
А никто сортировку и не обещал.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список файлов и папок в каталоге Evgenuych96 Паскаль, Turbo Pascal, PascalABC.NET 7 27.10.2012 14:07
Получить список расшаренных папок Scooter72 Работа с сетью в Delphi 7 16.06.2010 19:46
Получить список файлов и папок. gusluk Общие вопросы Delphi 3 10.03.2009 12:49
Получить список папок Иллидан Общие вопросы Delphi 1 22.03.2008 15:24
Microsoft Office Outlook : удаление папок в папке контакты bufer Софт 0 05.12.2007 16:58