Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.024 c
4-1086198608
Lessa
2004-06-02 21:50
2004.07.18
Кнопка ПУСК


3-1087479173
peypivo
2004-06-17 17:32
2004.07.18
firebird


1-1089035369
arhis
2004-07-05 17:49
2004.07.18
Как урезать файл TFileStream?


14-1088602579
pasha_golub
2004-06-30 17:36
2004.07.18
Помогите с Java


4-1086248300
Miha
2004-06-03 11:38
2004.07.18
COM порт