Форум: "Начинающим";
Текущий архив: 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.04 c