Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 19:23   #1
marat-link
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 12
Печаль Получение список mp3-файлов со всеми подкаталогами

Всем доброго вечера! Надо просканировать все каталоги и подкаталоги на наличие mp3-фалов.
Немного изменил код стандартной процедуры (ссылка ниже):
http://delphiworld.narod.ru/base/scan_dir_subdirs.html
Вот на этот код:
Код:
procedure ScanDir(StartDir: string; Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
begin
  if Mask = '' then
    Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  if FindFirst(StartDir + Mask, faAnyFile, SearchRec) = 0 then
  begin
    repeat Application.ProcessMessages;
      if (SearchRec.Attr and faDirectory) <> faDirectory then
        List.Add(StartDir + SearchRec.Name)
      else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')then begin
        List.Add(StartDir + SearchRec.Name + '\');
      ScanDir(StartDir + SearchRec.Name + '\', Mask, List);
  end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Clear;
  ScanDir('c:', '*.mp3', ListBox1.Items);
  Label1.Caption := IntToStr(ListBox1.Items.Count);
end;
Проблема - процедура не хочет сканировать подкаталоги. Почему? Где ошибка?
marat-link вне форума Ответить с цитированием
Старый 12.12.2010, 19:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это не процедура а дурость. Если она не нашла в начальном каталоге файлы по такой маске то в подкаталоги она не пойдет.
поправь так:
добавь
Код:
uses        masks,
и перепиши ее
Код:
procedure ScanDir(StartDir: string; Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
begin
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  if FindFirst(StartDir + '*.*', faAnyFile, SearchRec) = 0 then
  begin
    repeat Application.ProcessMessages;
      if (SearchRec.Attr and faDirectory) <> faDirectory then
        List.Add(StartDir + SearchRec.Name)
      else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')then begin
        if MatchesMask(SearchRec.Name,Mask) then
        List.Add(StartDir + SearchRec.Name + '\');
      ScanDir(StartDir + SearchRec.Name + '\', Mask, List);
  end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Моментальные моменты я выделил пожирнее
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2010, 20:30   #3
marat-link
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 12
По умолчанию

Спасибо Stilet! По вашему сообщению понял в зачем и почему не корректно работает процедура. Вот переписанная процедура:
Код:
procedure ScanDir(StartDir: string; Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
begin
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  if FindFirst(StartDir + '*.*', faAnyFile, SearchRec) = 0 then
  begin
    repeat Application.ProcessMessages;
      if ((SearchRec.Attr and faDirectory) <> faDirectory) and (MatchesMask(SearchRec.Name,'*.mp3')) then
        List.Add(StartDir + SearchRec.Name)
      else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')then begin
        if MatchesMask(SearchRec.Name,'*.mp3') then
        List.Add(StartDir + SearchRec.Name + '\');
      ScanDir(StartDir + SearchRec.Name + '\', Mask, List);
  end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Проблема решена!
marat-link вне форума Ответить с цитированием
Старый 12.12.2010, 20:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
marat-link
А какого же ты кукана две темы создал? Учти это карается. На первый раз прощаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2010, 22:12   #5
marat-link
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 12
По умолчанию

Буду знать! Хорошо, что предупредил.
marat-link вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приложение которое выводит список файлов текущего каталога и при клике на любом из файлов откроет его. LimanSSk Общие вопросы Delphi 2 18.05.2009 16:03
Проблема с декодированием файлов формата mp3 Котовский Мультимедиа в Delphi 6 13.02.2009 17:32
MediaPlayer - как сделать последовательное воспроизведение mp3 файлов (именно mp3) Kashp Компоненты Delphi 13 28.09.2007 08:38
Получение размера mp3 файла Mickle Общие вопросы Delphi 1 05.04.2007 00:32
Чтение MP3 файлов из папки PAVEL315 Общие вопросы Delphi 1 03.03.2007 13:33