![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск папок [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(название_папки);