Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Найти файлы с определенным расширением [D5, D7, WinXP]


Sergey_R ©   (2005-09-20 13:33:00) 

Подскажите, пожалуйста, как найти в заданной папке все файлы с определнным расширением? Пробовал использовать Findfirst и Findnext, но что-то не получается :-(.


Sergey_R   (2005-09-23 15:49:00) [1]

Спасибо за ответы, но на каком-то сайте нашел рекурсивную функцию, которая все ищет!


IceBeerg   (2005-09-21 16:37:00) [2]

begin...end ©   (21.09.05 16:34) [16]
О! Оно! А ведь знал... Надо чаще пользоваться...


IceBeerg   (2005-09-21 16:36:00) [3]

Хотя, в прочем, DirectoryExistsи If FindFirst(Dir+'*.*',faAnyFile,SearchRec)=0заменит.


begin...end   (2005-09-21 16:34:00) [4]

> IceBeerg ©   (21.09.05 16:27) [15]

IncludeTrailingPathDelimiter


IceBeerg   (2005-09-21 16:27:00) [5]

Anatoly Podgoretsky ©   (21.09.05 16:12) [14]
Спасибо, я как то на эту строку внимания не обращал... вроде начальную директорию всегда сам задовал... да надо смотреть длинну Dirда и DirectoryExistsне помешает.


Anatoly Podgoretsky   (2005-09-21 16:12:00) [6]

Это путь к AV, поскольку это может выродиться в
If Dir[0]<>'\' Then Dir:=Dir+'\'; при Dir = nil


IceBeerg   (2005-09-21 16:07:00) [7]

Procedure GetFileList(Dir:String; var FileList:TStringList);
Var
SearchRec:TSearchRec;
Begin
If Dir[Length(Dir)]<>'\' Then Dir:=Dir+'\';
If FindFirst(Dir+'*.*',faAnyFile,SearchRec)=0 Then
Repeat
 Application.HandleMessage;
 If SearchRec.Name='.' Then Continue;
 If SearchRec.Name='..' Then Continue;
 If SearchRec.Attr and faDirectory <> 0 Then GetFileList(Dir+SearchRec.Name,FileList)
                                        Else FileList.Add(Dir+SearchRec.Name);
Until FindNext(SearchRec)<>0;
FindClose(SearchRec);
End;


Проверь сначала, что-то мне его работоспособность не совсем нравиться, но времени отлаживать небыло...


umbra   (2005-09-21 15:31:00) [8]


> Но функции Findfirst и Findnext не ищут во вложенных папках!

Зато ими можно найти вложенные папки, а потом в них поискать.


Sergey_R   (2005-09-21 15:20:00) [9]

Это все, конечно, хроршо. Но функции Findfirst и Findnext не ищут во вложенных папках! Может есть какая-нибудь функция из WinAPI, которая просматривает подкаталоги?


IceBeerg   (2005-09-20 17:57:00) [10]

Fay ©   (20.09.05 17:38) [9]
Да. Но как то по старой привычке, еще с Паскаля, и работы с именно Assign, Reset... вырвалось.


Fay   (2005-09-20 17:38:00) [11]

2 IceBeerg ©   (20.09.05 17:33) [8]
Я спросил (5, 7) потому, что решил уж , что отстал от жизни и всё прогрессивное человечество ушло, собрав монатки, далеко вперёд.

Если не ошибаюсь, {$I} для AssignFile, Reset и т.п., а для DeleteFile не нужна ваще.


IceBeerg   (2005-09-20 17:33:00) [12]

Fay ©   (20.09.05 17:04) [7]
Ну, сложно сказать... DeleteFile работает верно и ошибок действительно не должно быть, но так, на сяк случай...


Fay   (2005-09-20 17:04:00) [13]

2 IceBeerg ©   (20.09.05 16:59) [6]
А как же эту ошибку вызвать?


IceBeerg   (2005-09-20 16:59:00) [14]

Fay ©   (20.09.05 16:54) [5]
Зачем?

Если при удалении файла вдруГ произойдет ошибка, чтобы исключения небыло... ну типа так...

Type Switch
Syntax {$I+} or {$I-}{$IOCHECKS ON} or {$IOCHECKS OFF}
Default {$I+}{$IOCHECKS ON}
Scope Local
Remarks

The $I switch directive enables or disables the automatic code generation that checks the result of a call to an I/O procedure. I/O procedures are described in the Delphi Language Guide. See Standard routines and I/O. If an I/O procedure returns a nonzero I/O result when this switch is on, an EInOutError exception is raised (or the program is terminated if exception handling is not enabled). When this switch is off, you must check for I/O errors by calling IOResult.


Fay   (2005-09-20 16:54:00) [15]

2 IceBeerg ©   (20.09.05 16:00) [4]
>> {$I-}... {$I+}
Зачем?


IceBeerg   (2005-09-20 16:00:00) [16]

Антоныч ©   (20.09.05 13:40) [3]
неправильно... надо:
var i: integer;
  f: TSearchRec;
begin
i:=FindFirst( 'C:\window\'+'*.*',faAnyFile,f);
while (i=0) do begin
{$I-}
  DeleteFile('C:\window\'+f.Name);
{$I+}

  i:=FindNext(f);
end;
Application.MessageBox('WinStufff','УУУУ',0);


Антоныч   (2005-09-20 13:40:00) [17]

var i: integer;
   f: TSearchRec;
begin
 i:=FindFirst('D:\'+'*.xls',faAnyFile,f);
 while (i=0) do begin
   DeleteFile('D:\+f.Name);
   i:=FindNext(f);
 end;


Big Joe   (2005-09-20 13:39:00) [18]

Искать все файлы в заданной директории с расширение rap

var
 F: TSearchRec;
 Path: string;
 Attr: Integer;
begin
 {Искать все файлы в заданной директории с расширение .rap}
 Path := 'e:\audio\album31\*.rap';
 {которые имеют атрибуты "Только для чтения" и "Архивный"}
 Attr := faReadOnly + faArchive;

 FindFirst(Path, Attr, F);

 {Если хотя бы один файл найден, то продолжить поиск}
 if F.name <> '' then
 begin
   ListBox1.Items.Add(F.name); {Добавление в TListBox имени найденного файла}
   while FindNext(F) = 0 do
     ListBox1.Items.Add(F.name);
 end;
 FindClose(F);
end.


TUser   (2005-09-20 13:37:00) [19]

> Пробовал использовать Findfirst и Findnext, но что-то не получается :-(.

Правильно пробовал. Посмотри к ним пример в хелпе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо