Удаление файлов из ListBox&програмный поиск файлов

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Yura_ua
Сообщения: 63
Зарегистрирован: 07 дек 2006, 17:52

25 май 2007, 17:35

Люди!!! Спасайте!!! Очень срочно!!! Надо чтобы в ListBox удалялись (или же не добавлялись) некоторые типы файлов. Вот исходник:

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

procedure TForm1.PlayList(Path: string);
var
     FindRes:Integer;
  SearchRec: TSearchRec; 
begin
FindRes:=FindFirst(Path+'*.*',faAnyFile,SearchRec);
While FindRes=0 do
   begin
      if ((SearchRec.Attr and faDirectory)=faDirectory) and
      ((SearchRec.Name='.')or(SearchRec.Name='..')) then
         begin
            FindRes:=FindNext(SearchRec);
            Continue;
         end;

      // если найден каталог, то
      if ((SearchRec.Attr and faDirectory)=faDirectory) then
         begin
            // входим в процедуру поиска с параметрами текущего каталога +
            // каталог, что мы нашли
            PlayList(Path+SearchRec.Name+'\');
            FindRes:=FindNext(SearchRec);
            // после осмотра вложенного каталога мы продолжаем поиск
            // в этом каталоге
            Continue; // продолжить цикл
         end;

      ListBox1.Items.Add(SearchRec.Name);
      ListBox2.Items.Add(Path+SearchRec.Name);
      FindRes:=FindNext(SearchRec);
   end;
FindClose(SearchRec);
end;
Если *.* меняю на нужное мне расширение, то в подкаталогах не ищет.
В ListBox1 отображаются имена файлов, а в ListBox2 я пихаю пути к ним и поэтому мне нужно, чтобы ненужные мне файлы удалялись из обеих ListBox"ов. Подскажите что-нибудь пожалуйста, а то меня убьют во вторник.
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

25 май 2007, 17:58

А в чем проблема? У тебя же есть имя файла (SearchRec.Name). Не добавляй в списки ненужные файлы (не делай ListBox1.Items.Add и ListBox2.Items.Add).
Yura_ua
Сообщения: 63
Зарегистрирован: 07 дек 2006, 17:52

26 май 2007, 23:35

Блин, действительно:-)
Yura_ua
Сообщения: 63
Зарегистрирован: 07 дек 2006, 17:52

27 май 2007, 17:16

BBB писал(а):А в чем проблема? У тебя же есть имя файла (SearchRec.Name). Не добавляй в списки ненужные файлы (не делай ListBox1.Items.Add и ListBox2.Items.Add).
А теперь ещё одна проблема: если перед ListBox1.Items.Add я проверяю расширение файла, то не работает ничего. Вот что я пробовал:

if SearchRec.name='*.bmp' then listBox1.Items.Add(SearchRec.Name);

Насколько я понял, это не правильно. ВВВ, может вы меня не поняли: меня смущают не ненужные файлы, а файлы с ненужным расширением.
Blood_Magic
Сообщения: 268
Зарегистрирован: 30 июн 2005, 14:53

27 май 2007, 21:35

Yura_ua писал(а):А теперь ещё одна проблема: если перед ListBox1.Items.Add я проверяю расширение файла, то не работает ничего. Вот что я пробовал:

if SearchRec.name='*.bmp' then listBox1.Items.Add(SearchRec.Name);

Насколько я понял, это не правильно. ВВВ, может вы меня не поняли: меня смущают не ненужные файлы, а файлы с ненужным расширением.

1. if Copy(SearchRec.name,Length(SearchRec.name)-3,MaxInt)='.bmp' then listBox1.Items.Add(SearchRec.Name);
2. твоя конструкция
FindRes:=FindFirst(Path+'*.*',faAnyFile,SearchRec);
будет искать только папки вида "Wiвs.TP", а они че часты ;) , короче говоря ты врятли найдешь вложенные папки
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Blood_Magic
Сообщения: 268
Зарегистрирован: 30 июн 2005, 14:53

27 май 2007, 21:48

А уж понаписал-то всего, вот так вообще нагляднее и короче:

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

procedure SearchFiles(const dir:string);
var
  sr: TSearchRec;
  fn:string;
begin
  if FindFirst(dir+'*',faAnyFile,sr) = 0 then
    begin
      repeat
        if sr.Name[1]<>'.' then
          begin
            fn:=sr.Name;
            if sr.Attr and faDirectory=faDirectory then SearchFiles(dir+fn+'\') else
              if Copy(fn,Length(fn)-3,MaxInt)='.bmp' then
                begin
                  ListBox1.Items.Add(fn);
                  ListBox2.Items.Add(dir+fn);
                end;
          end;
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
end;
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Ответить