![]() |
|
|
Регистрация | << Правила форума >> | 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 в нужное место теперь все замечательно работает спасибо.... |