Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Поиск папок   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.051 c
8-1110140982
имя
2005-03-06 23:29
2005.07.11
сохранить из Image1 в DLL


4-1115928013
NikNet
2005-05-13 00:00
2005.07.11
Как временно запретить работать программе>?


9-1112006972
craKer
2005-03-28 14:49
2005.07.11
Наложение текстуры тайлами (GLscene)


3-1117083340
Dmitry_VP
2005-05-26 08:55
2005.07.11
Firebird


3-1116870467
Yuri Btr
2005-05-23 21:47
2005.07.11
Использование автоинкремента как идентификатора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский