Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.039 c
1-1089089115
Валентин
2004-07-06 08:45
2004.07.18
runtime packages


4-1086466728
lena19
2004-06-06 00:18
2004.07.18
не могу поставить локальную ловушку


1-1088661794
AndrewK
2004-07-01 10:03
2004.07.18
Как можно сделать подключаемые модули к программе


14-1088579087
oleg_krechetov
2004-06-30 11:04
2004.07.18
Сдача ВКР


14-1088184065
XeLax
2004-06-25 21:21
2004.07.18
Узнать имя сообщения по номеру





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский