![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем здравствуйте...
Есть исходный код: Код:
begin
dtp.DateTime:=Tdatetime(now);
dec(s);
timer.Caption:=IntToStr(s);
if timer.Caption='0' then begin
timer1.Enabled:=false;
{Искать все файлы в заданной директории с расширение .DOC}
Path := edit1.text+'*.DOC';
{которые имеют атрибуты "Только для чтения" и "Архивный"}
Attr := faReadOnly + faArchive;
FindFirst(Path, Attr, F);
{Если хотя бы один файл найден, то продолжить поиск}
if F.name <> '' then begin
ListBox1.Items.Add('Наиден фаил: '+F.name +' ['+datetostr(dtp.Date)+'] ['+timetostr(dtp.Time)+']'); {Добавление в TListBox имени найденного файла}
Вообщем это поисковичок который в груде хлама и мусора ищет файлы с расширением .DOC , необходимо что бы программа искала по мимо doc ещё xls и txt подскажите как это добавить |
|
#2
|
||||
|
||||
|
Только последовательным перебором расширений:
Код:
ArrExt := VarArrayOf(['txt','doc','htm','prn']);
for i := 0 to VarArrayHighBound(ArrExt,1)
do begin
Path := Format('%s*.%s',[edit1.text,ArrExt[i]]);
... |
|
#3
|
||||
|
||||
|
сделал так:
Код:
var
path:string;
F: TSearchRec;
Attr: Integer;
mes: TIdMessage;
error : Integer;
ArrExt:variant;
i:integer;
begin
dtp.DateTime:=Tdatetime(now);
ArrExt := VarArrayOf(['txt','doc','htm','prn']);
for i := 0 to VarArrayHighBound(ArrExt,1)
do begin
Path := Format('%s*.%s',[edit1.text,ArrExt[i]]);
{которые имеют атрибуты "Только для чтения" и "Архивный"}
Attr := faReadOnly + faArchive;
FindFirst(Path, Attr, F);
// if f.Name=('*.txt') then
{Если хотя бы один файл найден, то продолжить поиск}
if (F.name <> '') then begin
ListBox1.Items.Add('Наиден фаил: '+F.name +' ['+datetostr(dtp.Date)+'] ['+timetostr(dtp.Time)+']');
end;
end;
end;находит правда почемуто один фаил 4 раза... Почему? а можно усовершенствовать что-бы искал только один фаил а не все что есть в папке (сначала 1 нашел перенёс в папку, потом 2й перенес в папку и.т.д) |
|
#4
|
||||
|
||||
|
Немного не так. FindFirst так можно использовать только если имя файла уникально в каталоге, а вот когда речь идет о поисковой маске, то уже использовать надо FindNext. Почитайте литературу, как правильно пользоваться этими функциями.
|
|
#5
|
|||
|
|||
|
Код:
uses masks;
...
const
M : Array [0..1] Of String = ('*.doc', '*.xls');
procedure findFiles(Path : String);
var
h, I : Integer;
F : TSearchRec;
begin
h := FindFirst(Path + '*.*', faAnyfile,F);
While h = 0 Do
Begin
If (F.Attr And faDirectory) <> 0
Then FindFiles(PAth + F.Name + '\') // Рекурсия по подкаталогам
Else
For I := Low(M) To High(M) Do
If MatchesMask(M[i],F.Name) Then // не помню порядок параметров - проверь по справке
Begin
// Файл найден. Делаем что нужно
Break;
End;
h := FindNext(F);
End;
FindClose(F);
end; |
|
#6
|
||||
|
||||
|
Цитата:
Да имя файла уникально просто я дал кусок кода, дальше когда программа находит фаилик она переносит его в папку дня и каталог не содержит папок с расширением doc,xls,txt... я сделал так как ты сказал: Код:
ArrExt := VarArrayOf(['txt','dbf','xls','877']);
for i := 0 to VarArrayHighBound(ArrExt,1)
do begin
Path := Format('%s*.%s',[edit1.text,ArrExt[i]]);
Attr := faReadOnly + faArchive;
FindFirst(Path, Attr, F);
end;Добавив end в нужное место теперь все замечательно работает спасибо.... |