Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизПоиск папок Найти похожие ветки
← →
Knoxville (2005-06-14 23:23) [0]Здраствуйте!
Подскажите, как можно найти все папки в определенной папке и отразить их в виде списка.
Спасибо.
← →
Eraser © (2005-06-14 23:26) [1]Knoxville (14.06.05 23:23)
Подскажите, как можно найти все папки в определенной папке
FindFirst/Next + F1
отразить их в виде списка
List.Items.Add(название_папки);
← →
Knoxville (2005-06-14 23:30) [2]FindFirst/Next ищет файлы, а мне надо папки. В хелпе только про файлы написано.
← →
Knoxville (2005-06-14 23:39) [3]Извиняюсь, папки находит, но иногда какие-то, которых нет, типа ".".
Тогда вопрос: Я не знаю сколько папок всего - надо цикл запускать. Как узнать количество папок?
← →
[lamer]Barmaglot © (2005-06-14 23:47) [4]Исключай папки с названием "." и ".." из списка, это спец папки. первая обозначает папку которая открыта в данный момент, вторая папку которая уровнем выше (для примера открой что нибудь типа нортон коммандора и посмотри, практически в любой директории (кроме корневой) увидишь эти папки...
← →
Eraser © (2005-06-14 23:47) [5]Knoxville (14.06.05 23:39) [3]
Извиняюсь, папки находит, но иногда какие-то, которых нет, типа ".".
Их просто надо игнорировать.
Я не знаю сколько папок всего - надо цикл запускать.
Точно!
Как узнать количество папок?
Считать во время работы цикла.
← →
Zeqfreed © (2005-06-14 23:47) [6]Knoxville (14.06.05 23:39) [3]
> Я не знаю сколько папок всего - надо цикл запускать.
> Как узнать количество папок?
Завести переменную-счетчик
> Извиняюсь, папки находит, но иногда какие-то, которых
> нет, типа ".".
Папки "." и ".." есть в каждом каталоге. "." - текущий каталог, ".." - каталог на один уровень выше, просто по условию не добавдяй их в список.
← →
Knoxville (2005-06-14 23:55) [7]Так а на сколько счетчик делать?
for i:=0 to ??? do
← →
Eraser © (2005-06-14 23:57) [8]Knoxville (14.06.05 23:55) [7]
Читать книжку по паскалю... конкретно про циклы while..do, repeat..until.
← →
Просто Джо © (2005-06-15 08:08) [9]Вот, по доброте душевной пост из закрытой ветки про рекурсивную очистку директорий.
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 чего-нибудь важного :))
← →
Begu (2005-06-15 08:26) [10]а послать списку сообщение LB_DIR с параметром DDL_DIRECTORY не поможет?
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.04 c