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