Текущий архив: 2004.07.18;
Скачать: CL | DM;
Вниз
FindFirst Найти похожие ветки
← →
Cyxapeff (2004-07-03 19:03) [0]Мастера, подскажите новичку, возможно ли сделать поиск файлов с несколькими расширениями используя только одну функцию? На FindFirst (("*.jpg") or (*.gif) , faAnyFile,sr); Дельфи почему-то ругается...
← →
begin...end © (2004-07-03 19:06) [1]ИМХО, нельзя. Ищи все и выбирай нужные.
> ("*.jpg") or (*.gif)
А это вообще УЖАС.
← →
OSokin © (2004-07-03 19:08) [2]Правильно... Сделай по-отдельности. К тому же это же функции... Сделай так: если (поиск по *.jpg) или (поиск по *.gif) то ...
Хотя если есть и тот, и тот файл...
Так что лучше по отдельности.
← →
begin...end © (2004-07-03 19:09) [3]Или по одной и той же папке проходись дважды.
В смысле, в первый раз указывай *.jpg, во второй - *.gif.
Но что-то мне заранее не нравится такое решение.
← →
Семен Сорокин © (2004-07-03 19:11) [4]ищи по "*.*" а потом проверяй на соответствие ф-ей MatchesMask.
← →
Anatoly Podgoretsky © (2004-07-03 19:38) [5]Именно так а не два поиска, а то потом удивляемся почему так медленно
← →
Anatoly Podgoretsky © (2004-07-03 19:39) [6]Есть даже смысл написать функцию FindExt
← →
begin...end © (2004-07-03 19:40) [7]
> [5] Anatoly Podgoretsky © (03.07.04 19:38)
> [3] begin...end © (03.07.04 19:09)
Предчувствия меня не обманули... :-)
← →
Cyxapeff (2004-07-03 20:01) [8]Спасибо всем большое!
← →
Anatoly Podgoretsky © (2004-07-03 20:04) [9]Пример вот здесь http://podgoretsky.com/ftp/Language/nps/ru.delphi.html#N158
← →
ЮрийК © (2004-07-03 21:33) [10]Оттуда:
"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 - название этого каталога?
← →
GuAV © (2004-07-04 01:36) [11]
> Именно так а не два поиска, а то потом удивляемся почему
> так медленно
Хм... я скачал с Вашего сайта компонент TDirScan, в нём нашел "два поиска", ещё удивился. Значит опровергаете такой вариант?
← →
Mim1 © (2004-07-04 09:30) [12]
> [11] GuAV © (04.07.04 01:36)
Может стоит писать к кому обращаетесь?
← →
Anatoly Podgoretsky © (2004-07-04 10:06) [13]GuAV © (04.07.04 01:36) [11]
Очень просто, ты не понял почему там так сделано, для этого нужны знания не по Дельфи, а по операционной системе, по устройству ее каталоговой системе. Данный компонент не имеет отношения к заданому вопросу, на то что имеет отношение дана прямая ссылка.
← →
GuAV © (2004-07-04 20:30) [14]Тогда хотелось бы знать, зачем в том компоненте так делать? у меня вроде так работает:
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 21:17) [15]Имена файлов и каталогов идут вперемежку. Например для удаления нужно сначало удалить ВСЕ файлы, потом можно удалять каталог.
То есть гарантированая последовательность обработки, сначала все файлы, а потом все каталоги.
Ну и ероме того это черт знает когда было написано :-)
← →
GuAV © (2004-07-04 21:43) [16]
> Например для удаления
Не аргумент... воп одна из моих старых прог...
файлы сначала - одним поиском.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 23:35) [17]Ну я бы тоже, давно было, тренировался на компонентах.
← →
ЮрийК © (2004-07-05 11:53) [18]Anatoly Podgoretsky - ответьте на 10 пост по поводу удаления непустого каталога,
по линку:
http://podgoretsky.com/ftp/Language/nps/ru.delphi.html#N157
← →
GuAV © (2004-07-05 13:48) [19]Удалено модератором
← →
ЮрийК © (2004-07-05 15:32) [20]SHGetSpecialFolderPath(Handle, P, CSIDL_PERSONAL, True);
Прежде чем проверять, скажите, что должно согласно этому коду удалиться - какая/ие папка/и?
← →
GuAV © (2004-07-05 16:16) [21]ЮрийК © (05.07.04 15:32) [20]
Ума хватило не запускать сразу :-)
> какая/ие папка/и?
"Мои документы" текущего пользователя. И все.
← →
Mim1 © (2004-07-05 16:46) [22]Интересно, а в какой задаче возникает необходимость удалять каталог, да еще с подкаталогами?
Вот сижу голову ломаю, придумать не могу.
← →
GuAV © (2004-07-05 16:58) [23]Mim1 © (05.07.04 16:46) [22]
Задача та же, что и у меня в [19]: чтоб вопросов не было.
← →
Mim1 © (2004-07-05 17:15) [24][23] GuAV © (05.07.04 16:58)
>CSIDL_PERSONAL File system directory that serves as a common respository for documents.
Вот и я к тому. Одни извращения.
Может стоит такие задачи выполнять самому? чтобы небыло мучительно больно з бесцельно прожитые годы.
Страницы: 1 вся ветка
Текущий архив: 2004.07.18;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.024 c