Страница 1 из 3

Усовершенствовать скрипт

Добавлено: 25 авг 2005, 21:29
Duncon
Народ есть такой скрипт ищущий в папке наличие определенных файлов

Код: Выделить всё

procedure Dir(Path: string; FileList: TStrings);
 var
   SR: TSearchRec;
 begin
    if FindFirst(Path + '*.bmp', faAnyFile, SR) = 0 then
   begin
     repeat
       if (SR.Attr <> faDirectory) then
       begin
         FileList.Add(SR.Name);
       end;
     until FindNext(SR) <> 0;
     FindClose(SR);
   end;
//вызов ее
Dir('foto\', Memo1.lines);
Дабы пропустить другие файлы я просто повторил if несколько раз, но это криво. Вот, как бы его улучшить чтоб был типа список из пропускаемых файлов и скрипт перебирал бы его, а не конкретно заданное, решение где-то рядом, но допереть не могу..
Заранее благодарен Duncon

Добавлено: 26 авг 2005, 00:39
Игорь Акопян
а эти пропускаемые файлы удовлетворяют твоему условию? т.е. тоже BMP?

Добавлено: 26 авг 2005, 11:33
Duncon
Нет остальные фильтры - это *.gif, *.jpg итп

Добавлено: 29 авг 2005, 08:24
LAngel
Дабы пропустить другие файлы я просто повторил if несколько раз, но это криво. Вот, как бы его улучшить чтоб был типа список из пропускаемых файлов и скрипт перебирал бы его, а не конкретно заданное, решение где-то рядом, но допереть не могу..
Пропустить? да при маске *.bmp он их и не будет брать....
может быть наоборот включить? тогда бери при FindFirst маску *.*, а в цикле
проверяй SR.Name на соответствие типу. например, с помощью ExtractFileExt()

Добавлено: 29 авг 2005, 09:23
Duncon
Уважаемый я имел ввиду, что повторяю цикл с разными фильтрами я показал только один из них.
А хочу, чтоб все было в одном кусочке кода который бы перебирал маски...

Добавлено: 29 авг 2005, 09:39
LAngel
Тогда, Уважаемый, смотри моё предыдущее сообщение, или пример нужен?

Добавлено: 29 авг 2005, 14:25
Duncon
LAngel писал(а):Тогда, Уважаемый, смотри моё предыдущее сообщение, или пример нужен?
Уважаемый,
- (Я не пытался оскорбить либо как-то наехать......)

Да хотелось бы наглядно, для полного понимания происходящего..

Добавлено: 29 авг 2005, 18:36
Игорь Акопян
Можно завести список (массив) и этот цикел прогонять подставляя его элементы...
Кстати,
'foto\'
Какая-то из функций для работы с файлами добавляет в конец слэш при необходимости...

Добавлено: 30 авг 2005, 08:57
Duncon
В данном случае 'foto\' это то место где ищем файлы.... Это не суть терзаний..
Меня больше напрягает вот эта строчка FindFirst(Path + '*.bmp', faAnyFile, SR) = 0 then
а точнее Path + '*.bmp' я хочу чтоб здесь можно было подставить несколько фильтров '*.bmp',' *.jpg' итд

Добавлено: 30 авг 2005, 11:07
LAngel

Код: Выделить всё

procedure Dir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
  Ext: String;
begin
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        Ext := UpperCase(ExtractFileExt(SR.Name));
        if (Ext = '.BMP') or (Ext = '.JPG') or (Ext = '.JPEG') or (Ext = '.GIF')
          then FileList.Add(SR.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;