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

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

Найти все папки [D6, WinXP]


PC ©   (2004-11-19 02:09:00) 

Вот мне надо найти все папки по указанному адресу (типа там C:\temp\Some_Thing). Как? Заранее спасибо.


begin...end   (2004-11-19 18:34:00) [1]


> [6] PC ©   (19.11.04 18:28)


> тока у меня были какие-то левые имена папок - '.'. Что это?

"." - текущий каталог;
".." - родительский каталог.


PC   (2004-11-19 18:28:00) [2]

Всем спасибо, заработало. Я вчера после прочтения поста № 2 попробовал сделать сам, тока у меня были какие-то левые имена папок - '.'. Что это? Да, и еще: есть-ли какая-нить функция для изменения расширения файла? Типа-там str := 'bla.bmp'; Превратить str в 'bla.jpg'? Я сделал через "найти точку и отрезать, а потом прибавить".


Fay   (2004-11-19 08:33:00) [3]

2 ***SPIDER***   (19.11.04 07:00) [4]
Попробуй так:
procedure TForm1.FindAllDir(List : TStrings; Dir : string);
var
 fd : WIN32_FIND_DATAA;
 fh : DWORD;
begin
 Dir := IncludeTrailingBackSlash(Dir);
 fh := FindFirstFile(PChar(Dir + '*.*'), fd);
 if fh <> INVALID_HANDLE_VALUE then
   try
     repeat
       if (fd.cFileName[0] <> '.') and ((fd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) then
         begin
           List.Add(Dir + fd.cFileName);
           FindAllDir(List, Dir + fd.cFileName)
         end;
     until not FindNextFile(fh, fd);
   finally
     Windows.FindClose(fh);
   end;
end;


8)


***SPIDER***   (2004-11-19 07:00:00) [4]

Попробуй так:

procedure TForm1.FindAllDir(Dir:String);
Var SR:TSearchRec;
   FindRes:Integer;
begin
Dir:=IncludeTrailingBackSlash(Dir);
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
While FindRes=0 do
  begin
     if ((SR.Attr and faDirectory)=faDirectory) and
     ((SR.Name='.')or(SR.Name='..')) then
     begin
       FindRes:=FindNext(SR);
       Continue;
     end;

     if ((SR.Attr and faDirectory)=faDirectory) then  
     begin
        ...
        {здесь запоминаем Dir в какой-то список (глобальный)}
        ...
        FindAllDir(Dir+SR.Name);
        FindRes:=FindNext(SR);
        Continue;
     end;
     FindRes:=FindNext(SR);
  end;
FindClose(SR);
end;


Тестировщица   (2004-11-19 04:41:00) [5]

Маску - так же, как и для файлов.(C:\temp\Some_Thing\*.*)
F1 FindFirst, посмотри пример и обрати внимание на faDirectory


PC   (2004-11-19 02:16:00) [6]

А разве так можно для папок? Я так ищю файлы. А как тогда задавать маску?


Devel   (2004-11-19 02:14:00) [7]

FindFirst,FindNext


Наверх

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