|
#1
|
|||
|
|||
Поиск mp3 файла
Здравстрвуйте.
Делаю поиск mp3 файла. Прописываю имя файла в edit1, маска в combobox1, выбор дисков в edit2. Процедура: Код:
procedure Find; var SearchRec: TSearchRec; cDir: string; begin GetDir(0,cDir); if cDir[length(cDir)] <> '\' then cDir := cDir+'\'; if FindFirst(FileName,faAnyfile,SearchRec) = 0 then repeat if (SearchRec.Attr and faAnyfile) = SearchRec.Attr then begin Form1.listbox1.Items.Add(cDir + SearchRec.Name); end; until FindNext(SearchRec) <> 0; if FindFirst('*', faDirectory, SearchRec) = 0 then repeat if (SearchRec.Attr and faDirectory) = faDirectory then if SearchRec.Name[1] <> '.' then begin ChDir(SearchRec.Name); Find; ChDir('..'); end; until FindNext(SearchRec) <> 0 ; end; Что меня не устраивает - поиск производится по первой букве. Тойсь. Если вписываю в edit1 слово Пугачева, тогда находит Пугачева - Айсберг, если пишу слово Айсберг - ничего не находит. Дальше. На диске D ищет без ошибок, на диске E с ошибкой "I/O error 123" (пробовал использовать try except end) не помогает), на диске C выскакивает сообщение "File not found", хотя файлы нужные выводит в Listbox1. Что тут может быть не так? Помогите пожалуйста. Извиняюсь, что поместил тему в Мультимедиа, так как это повязано с плейером. |
#2
|
|||
|
|||
Зачем так сложно?
Код:
uses Masks; procedure FindMp3(ADir : String; AFilter : String; ASubfolders : Boolean); var F : TSearchRec; iFound : Integer; begin ADir := IncludeTrailingPathDelimiter(ADir); iFound := FindFirst(ADir + '*.*',faAnyFile,F); While iFound = 0 Do Begin If (F.Name <> '.') And (F.Name <> '..') Then Begin If ((F And faDirectory) <> 0) And ASubfolders Then FindMP3(ADir + F.Name,AFilter,ASubfolders) Else If MatchesMask('*'+AFilter+'*.mp3',FName) Then Form1.ListBox.Items.Add(ADir + F.Name); End; iFound := FindNext(F); End; FindClose(F); end; И вся любовь... ЗЫ. Не помню точно в какой последовательности идут параметры в MatchesMask, может маску и имя файла надо поменять местами. Ну и список, куда добавляются файлы написал "от балды", поправишь соответсвенно. Последний раз редактировалось lmikle, 14.09.2013 в 23:31. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
valvl63 (14.09.2013)
|
#3
|
|||
|
|||
lmikle
проверьте, пожалуйста, код процедуры. Код:
procedure FindMp3(ADir : String; AFilter : String; ASubfolders : Boolean); |
#4
|
|||
|
|||
Цитата:
А чего его проверять-то? Из моего комментария внизу понятно, что код писался прямо здесь, а не в среде. Соответсвенно, могут быть мелкие ошибка и опечатки. Никто сразу "из коробки" работающий код не обещал, но идея изложена полностью. ЗЫ. Да, набросать здесь код, а потом еще ответить, быстрее, чем запускать Дельфи, писать там и проверять (еще ведь надо создать на диске соотв. структуры). Если уж сам не можешь разобраться, то пиши конкретно в чем проблема. ЗЗЫ. Пару очепяток поправил. Последний раз редактировалось lmikle, 14.09.2013 в 23:32. |
#5
|
|||
|
|||
Привет!
Поиск работает, но есть ещё один вопрос. Можно как нить сделать, чтобы поиск не реагировал на регистр? Спасибо. |
#6
|
||||
|
||||
В смысле? У вас результат выполнения этой процедурки разный на имени файла с большой и маленькой буквы?
Не должно бы вообще-то быть такого. FindFirst, FindNext не чувствительны к регистру насколько я помню. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Прописываю: Полька, ПОЛЬКА, полька. Ищет что написано.
|