Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск папок [D7, WinXP]


Knoxville ©   (2005-06-14 23:23:00) 

Здраствуйте!
Подскажите, как можно найти все папки в определенной папке и отразить их в виде списка.
Спасибо.


Begu   (2005-06-15 08:26:00) [1]

а послать списку сообщение LB_DIR с параметром DDL_DIRECTORY не поможет?


Просто Джо   (2005-06-15 08:08:00) [2]

Вот, по доброте душевной пост из закрытой ветки про рекурсивную очистку директорий.


unit ScanUtils;

interface
uses SysUtils, Classes;

procedure PurgeDir (const DirName: TFileName; DeleteRoot: Boolean = True);

implementation

procedure ScanDirectory (const Root: TFileName; const
 FileLst,DirLst: TStrings);
var
 DirInfo: TSearchRec;
 FileAttr: Word;
begin
 FileAttr := faDirectory;
 if FindFirst(Root+'\*.*',FileAttr,DirInfo) = 0 then
 begin
   repeat
     if (DirInfo.Attr and FileAttr) <> 0 then
     begin
       if (DirInfo.Name <> '.') and (DirInfo.Name <> '..') then
       begin
         DirLst.Add(Root+'\'+ DirInfo.Name);
         ScanDirectory(Root+'\'+ DirInfo.Name,FileLst,DirLst);
       end
     end
     else
       FileLst.Add(Root+'\'+DirInfo.Name);
   until FindNext(DirInfo) <> 0;
 end;
 FindClose (DirInfo);
end;

procedure PurgeDir (const DirName: TFileName; DeleteRoot: Boolean = True);
var
 DirList,
 FileList: TStrings;
 I: Integer;
begin
 DirList := TStringList.Create;
 try
   FileList := TStringList.Create;
   try
     ScanDirectory(DirName,FileList,DirList);
     for I := FileList.Count-1 downto 0 do
       DeleteFile(FileList[I]);
     for I := DirList.Count-1 downto 0 do
       RemoveDir(DirList[I]);
     if DeleteRoot then
       RemoveDir(DirName)
   finally
     FileList.Free;
   end;
 finally
   DirList.Free;
 end;
end;
end.

Может чего по-невнимательности упустил, писал "на коленке", но, принцип, я думаю, понятен.
П.С. Смотри - не грохни процедурой PurgeDir чего-нибудь важного :))


Eraser   (2005-06-14 23:57:00) [3]

Knoxville   (14.06.05 23:55) [7]

Читать книжку по паскалю... конкретно про циклы while..do, repeat..until.


Knoxville   (2005-06-14 23:55:00) [4]

Так а на сколько счетчик делать?


for i:=0 to ??? do


[lamer]Barmaglot   (2005-06-14 23:47:00) [5]

Исключай папки с названием "." и ".." из списка, это спец папки. первая обозначает папку которая открыта в данный момент, вторая папку которая уровнем выше (для примера открой что нибудь типа нортон коммандора и посмотри, практически в любой директории (кроме корневой) увидишь эти папки...


Eraser   (2005-06-14 23:47:00) [6]

Knoxville   (14.06.05 23:39) [3]
Извиняюсь, папки находит, но иногда какие-то, которых нет, типа ".".


Их просто надо игнорировать.

Я не знаю сколько папок всего - надо цикл запускать.

Точно!

Как узнать количество папок?

Считать во время работы цикла.


Zeqfreed   (2005-06-14 23:47:00) [7]

Knoxville   (14.06.05 23:39) [3]

> Я не знаю сколько папок всего - надо цикл запускать.
> Как узнать количество папок?

Завести переменную-счетчик

> Извиняюсь, папки находит, но иногда какие-то, которых
> нет, типа ".".

Папки "." и ".." есть в каждом каталоге. "." - текущий каталог, ".." - каталог на один уровень выше, просто по условию не добавдяй их в список.


Knoxville   (2005-06-14 23:39:00) [8]

Извиняюсь, папки находит, но иногда какие-то, которых нет, типа ".".
Тогда вопрос: Я не знаю сколько папок всего - надо цикл запускать. Как узнать количество папок?


Knoxville   (2005-06-14 23:30:00) [9]

FindFirst/Next ищет файлы, а мне надо папки. В хелпе только про файлы написано.


Eraser   (2005-06-14 23:26:00) [10]

Knoxville   (14.06.05 23:23)

Подскажите, как можно найти все папки в определенной папке


FindFirst/Next + F1

отразить их в виде списка

List.Items.Add(название_папки);


Наверх

Титульная страница Поиск, карта сайта Написать письмо