![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FindFirst [D6, WinXP]
Cyxapeff © (2004-07-03 19:03:00)Мастера, подскажите новичку, возможно ли сделать поиск файлов с несколькими расширениями используя только одну функцию? На FindFirst (('*.jpg') or (*.gif) , faAnyFile,sr); Дельфи почему-то ругается...
Mim1 (2004-07-05 17:15:00) [1][23] GuAV © (05.07.04 16:58)
>CSIDL_PERSONAL File system directory that serves as a common respository for documents.
Вот и я к тому. Одни извращения.
Может стоит такие задачи выполнять самому? чтобы небыло мучительно больно з бесцельно прожитые годы.
GuAV (2004-07-05 16:58:00) [2]Mim1 © (05.07.04 16:46) [22]
Задача та же, что и у меня в [19]: чтоб вопросов не было.
Mim1 (2004-07-05 16:46:00) [3]Интересно, а в какой задаче возникает необходимость удалять каталог, да еще с подкаталогами?
Вот сижу голову ломаю, придумать не могу.
GuAV (2004-07-05 16:16:00) [4]ЮрийК © (05.07.04 15:32) [20]
Ума хватило не запускать сразу :-)
> какая/ие папка/и?
"Мои документы" текущего пользователя. И все.
ЮрийК (2004-07-05 15:32:00) [5]SHGetSpecialFolderPath(Handle, P, CSIDL_PERSONAL, True);
Прежде чем проверять, скажите, что должно согласно этому коду удалиться - какая/ие папка/и?
GuAV (2004-07-05 13:48:00) [6]Удалено модератором
ЮрийК (2004-07-05 11:53:00) [7]Anatoly Podgoretsky - ответьте на 10 пост по поводу удаления непустого каталога,
по линку:
http://podgoretsky.com/ftp/Language/nps/ru.delphi.html#N157
Anatoly Podgoretsky (2004-07-04 23:35:00) [8]Ну я бы тоже, давно было, тренировался на компонентах.
GuAV (2004-07-04 21:43:00) [9]
> Например для удаления
Не аргумент... воп одна из моих старых прог...
файлы сначала - одним поиском.
program KillTree;
uses WinDos, Strings;
procedure DoDir(Path: PChar);
var S: TSearchRec; A:array[0..79] of Char; F: File;
begin
StrCopy(A,Path);
StrCat(A,'\*.*');
FindFirst(A,faAnyFile,S);
while DosError=0 do
with S do
begin
if Name[0]<>'.' then
begin
StrCat(StrCat(StrCopy(A,Path),'\'),Name);
if (Attr and faDirectory)<>0 then DoDir(A)
else
begin
Assign(F,StrPas(A));
Erase(F);
end;
end;
FindNext(S);
end;
RemoveDir(Path);
end;
var A: array[0..79] of Char;
begin
if ParamCount<>1 then Halt(3);
StrPCopy(A,ParamStr(1));
DoDir(A);
end.
> Ну и ероме того это черт знает когда было написано :-)
Так ведь до сих пор актуально... я бы тоже использовал, но мне процедурой привычнее.
Anatoly Podgoretsky (2004-07-04 21:17:00) [10]Имена файлов и каталогов идут вперемежку. Например для удаления нужно сначало удалить ВСЕ файлы, потом можно удалять каталог.
То есть гарантированая последовательность обработки, сначала все файлы, а потом все каталоги.
Ну и ероме того это черт знает когда было написано :-)
GuAV (2004-07-04 20:30:00) [11]Тогда хотелось бы знать, зачем в том компоненте так делать? у меня вроде так работает:
procedure TfrmMain.AddDir(const FileName: string);
const AttrArr: array[Boolean] of Integer
=(faAnyFile and not faDirectory, faAnyFile);
var SrcAttr: Integer;
procedure Process(const FileName: string);
var F: TSearchRec;
begin
ChDir(FileName);
try
if FindFirst('*',SrcAttr,F)=0 then
try
repeat
if (F.Attr and faDirectory)<>0 then
begin
if F.Name[1]<>'.' then
Process(F.Name);
end
else AddFile(F.Name); //ExpandFileName уже там
until FindNext(F)<>0;
finally
FindClose(F);
end;
finally
ChDir('..');
end;
end;
begin
ListView.Items.BeginUpdate;
try
SrcAttr:=AttrArr[chkRecourse.Checked];
Process(FileName);
finally
ListView.Items.EndUpdate;
end;
end;
Anatoly Podgoretsky (2004-07-04 10:06:00) [12]GuAV © (04.07.04 01:36) [11]
Очень просто, ты не понял почему там так сделано, для этого нужны знания не по Дельфи, а по операционной системе, по устройству ее каталоговой системе. Данный компонент не имеет отношения к заданому вопросу, на то что имеет отношение дана прямая ссылка.
Mim1 (2004-07-04 09:30:00) [13]
> [11] GuAV © (04.07.04 01:36)
Может стоит писать к кому обращаетесь?
GuAV (2004-07-04 01:36:00) [14]
> Именно так а не два поиска, а то потом удивляемся почему
> так медленно
Хм... я скачал с Вашего сайта компонент TDirScan, в нём нашел "два поиска", ещё удивился. Значит опровергаете такой вариант?
ЮрийК (2004-07-03 21:33:00) [15]Оттуда:
"Q-157: Как удалить непустой каталог?
procedure TForm1.Button1Click(Sender: TObject);
var
lpFileOp: TSHFileOpStruct;
begin
FillChar(lpFileOp,SizeOf(lpFileOp),0);
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_DELETE;
lpFileOp.pFrom := PChar(Edit1.Text);
lpFileOp.fFlags := FOF_NOCONFIRMATION;
SHFileOperation(lpFileOp);
end;
Ivan Daniloff "
Удаляется непустой каталог с файлами только?
Или может содержать внутри себя ещё непустые каталоги также?
Edit1.Text - название этого каталога?
Anatoly Podgoretsky (2004-07-03 20:04:00) [16]Пример вот здесь http://podgoretsky.com/ftp/Language/nps/ru.delphi.html#N158
Cyxapeff (2004-07-03 20:01:00) [17]Спасибо всем большое!
begin...end (2004-07-03 19:40:00) [18]
> [5] Anatoly Podgoretsky © (03.07.04 19:38)
> [3] begin...end © (03.07.04 19:09)
Предчувствия меня не обманули... :-)
Anatoly Podgoretsky (2004-07-03 19:39:00) [19]Есть даже смысл написать функцию FindExt
Anatoly Podgoretsky (2004-07-03 19:38:00) [20]Именно так а не два поиска, а то потом удивляемся почему так медленно