поиск файлов

Тема в разделе "Delphi - Система", создана пользователем vital, 10 июн 2006.

  1. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    я пробовал так
    Код (Text):
    procedure TForm1.Button1Click(Sender: TObject);
    Var SR:TSearchRec;
    FindRes:Integer;
    begin

    FindRes:=FindFirst('путь\*.mp3',faAnyFile,SR);
    While FindRes=0 do
    begin
    if ((SR.Attr and faDirectory)=faDirectory) and
    ((SR.Name='.')or(SR.Name='..')) then         begin
    FindRes:=FindNext(SR);
    Continue;
    end;
    form2.sListBox2.Items.Insert(form2.pathlst.Items.Count,sr.Name);
    form2.sListBox1.Items.Insert(form2.sListBox1.Items.Count,sr.Name);
    FindRes:=FindNext(SR);
    end;
    FindClose(SR);
    end;
    * во второй listbox должен добавляться путь вместе с именем..Как?
    2.Алгоритм работает только в пределах одной папки, как заставить работать и с вложенными? хотя бы до 3 уровней..

    зы.
    кажись придумал решение второго, пошел пробовать.
     
  2. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    никто не знает?
    вот мля..
     
  3. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Почему же, просто в очередной раз отвечать на самый ЧАВОшный вопрос особого желания нет.

    Вот пример обхода дерева каталогов(вроде Delphist FAQ). Расширить его до твоего случая не составит труда.
    Код (Text):
    Procedure ScanDir(Dir:string);
    var SearchRec:TSearchRec;
    begin
    if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
    if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
    repeat
    if (SearchRec.name='.') or (SearchRec.name='..') then continue;
    if (SearchRec.Attr and faDirectory)<>0 then
    ScanDir(Dir+SearchRec.name) //we found Directory: "Dir+SearchRec.name"
    else
    Showmessage(Dir+SearchRec.name); //we found File: "Dir+SearchRec.name"
    until FindNext(SearchRec)<>0;
    FindClose(SearchRec);
    end;
     
  4. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Kmet, то что привел ты делает оже самое что и то что привел в начале я, только понять сложнее..

    Вопрос в том и состоит чтобы код, как ты сказал, 'расширить';
     
  5. DCoder

    DCoder Гость

    Ну а в чём проблема? В коде, который предоставил Kmet, замени ShowMessage на Listbox2.Items.Add('путь\'+SR.name) (кстати, не пойму, зачем ты используешь процедуру Insert?). А также у меня возник вопрос по коду: если ты ищешь по маске 'путь\*.mp3', зачем оператор
    Код (Text):
    if ((SR.Attr and faDirectory)=faDirectory) and
    ((SR.Name='.')or(SR.Name='..')) then
    По такой маске директория никогда не будет найдена.
     
  6. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Разница принципиальная, мой пример использует рекурсивный подход для обхода вложенный папок.
    Твой ж просто проходит одну директорию, и дело тут даже не в маске, хотя она конечно тоже ошибочная.
     
  7. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    брр..чё-то я похоже, тупостей наделал..
    DCoder, твой пример у меня работал только в пределах одной директории.

    пс.
    сори, наверно, всё так по моей тупости.. голова не варит..хм..после вчерашнего.
     
Загрузка...

Поделиться этой страницей