Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.09.2011, 12:50
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию Поиск по расширению

Всем здравствуйте...
Есть исходный код:

Код:
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  
Старый 08.09.2011, 13:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Только последовательным перебором расширений:
Код:
 ArrExt := VarArrayOf(['txt','doc','htm','prn']);
 for i := 0 to VarArrayHighBound(ArrExt,1)
 do begin
     Path := Format('%s*.%s',[edit1.text,ArrExt[i]]);
     ...
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 08.09.2011, 14:25
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

сделал так:

Код:
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  
Старый 08.09.2011, 18:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Немного не так. FindFirst так можно использовать только если имя файла уникально в каталоге, а вот когда речь идет о поисковой маске, то уже использовать надо FindNext. Почитайте литературу, как правильно пользоваться этими функциями.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 08.09.2011, 21:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
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  
Старый 09.09.2011, 12:16
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Немного не так. FindFirst так можно использовать только если имя файла уникально в каталоге, а вот когда речь идет о поисковой маске, то уже использовать надо FindNext. Почитайте литературу, как правильно пользоваться этими функциями.

Да имя файла уникально просто я дал кусок кода, дальше когда программа находит фаилик она переносит его в папку дня и каталог не содержит папок с расширением 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 в нужное место теперь все замечательно работает спасибо....
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:31.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025