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

Вниз

Найти файлы с определенным расширением   Найти похожие ветки 

 
Sergey_R   (2005-09-20 13:33) [0]

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


 
TUser ©   (2005-09-20 13:37) [1]

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

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


 
Big Joe ©   (2005-09-20 13:39) [2]

Искать все файлы в заданной директории с расширение 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.


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

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;


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

Антоныч ©   (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);


 
Fay ©   (2005-09-20 16:54) [5]

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


 
IceBeerg ©   (2005-09-20 16:59) [6]

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 17:04) [7]

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


 
IceBeerg ©   (2005-09-20 17:33) [8]

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


 
Fay ©   (2005-09-20 17:38) [9]

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

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


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

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


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

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


 
umbra ©   (2005-09-21 15:31) [12]


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

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


 
IceBeerg ©   (2005-09-21 16:07) [13]

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;


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


 
Anatoly Podgoretsky ©   (2005-09-21 16:12) [14]

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


 
IceBeerg ©   (2005-09-21 16:27) [15]

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


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

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

IncludeTrailingPathDelimiter


 
IceBeerg ©   (2005-09-21 16:36) [17]

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


 
IceBeerg ©   (2005-09-21 16:37) [18]

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


 
Sergey_R ©   (2005-09-23 15:49) [19]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
6-1113090661
Максим
2005-04-10 03:51
2005.10.23
Тема письма


4-1124316897
i-s-v
2005-08-18 02:14
2005.10.23
Dialog+WM_KEYDOWN


14-1128062530
Карелин Артем
2005-09-30 10:42
2005.10.23
Использование 2-х модемов при выходе в инет.


14-1128022479
lookin
2005-09-29 23:34
2005.10.23
CSKA-MIDT


14-1128410907
Антоний
2005-10-04 11:28
2005.10.23
Соотношение шфрита и мм.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский