![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Res := FindFirst('Models\*\ЛМ-68.md', faAnyFile, F);
Не находит. Если сказать тупо: Res := FindFirst('Models\ЛМ, ЛВС\ЛМ-68.md', faAnyFile, F); То да, он честно находит ЛМ-68.md Но название папки-то заранее не известно, вот в чём суть. -------------------- |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
FindFirst - вообще очень глючна, причем это не проблема Дельфи, это проблема Windows: Embarcadero QC: FindFirst/FindNext wildcard error
Что касается Дельфи, то там явно сказано, что Цитата The FileMask may contain a path, as well as a file name. The file name may contain wild cards: , то есть, шаблоны допустимы только в имени файла, но не в пути к нему.? : Match any one character * : Match 0, 1 or more characters |
TarasBer |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да я вообще понимаю, что эта функция - часть ОС.
Но мне что тогда делать-то? И ещё, немного оффтоп - как известные файловые менеджеры определяют, является ли то, что скрывается под именем, каталогом, или просто файлом? Финдфирст тупо смотрит на наличие точки в имени, то есть он не катит. -------------------- |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Но мне что тогда делать-то? Я бы, наверное, написал функцию, проверяющую, подходит ли имя файла под заданный шаблон. И ищи файлы рекурсивно во всех папках, начиная с той, что ДО звездочки. Нашел - проверил полное имя. Подходит под шаблон - хорошо, не подходит - ищи дальше... |
TarasBer |
![]()
Сообщение
#5
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Но для этого надо написать поиск папок, а этого я тоже не умею, так как параметр faDir выдаст мне просто названия файлов без точки. Если в назвинии папки окажется точка, то как я её вычислю?
-------------------- |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Но для этого надо написать поиск папок, а этого я тоже не умею так как параметр faDir выдаст мне просто названия файлов без точки А не надо искать с faDir, ищи с faAnyFile и потом проверяй поле SearchRec.Attr ...Кстати, ничего писать самому уже не надо (в смысле, соответствие маске), все есть в Дельфи... uses { ... ,} Masks; |
TarasBer |
![]()
Сообщение
#7
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сделал по аналогии, заработало, спасибо.
-------------------- |
Unconnected |
![]()
Сообщение
#8
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
У меня, помню, постоянно на строке FindClose(SRec); ошибка выскакивала, если в консоли вышеприведенное использовать.
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Не знаю, только что гонял в консоли, работает, зараза... А чего за ошибку-то выдавало, не проверял?
|
Unconnected |
![]()
Сообщение
#10
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
В такой процедуре в консоли:
На выделенной строке выдаёт Incompatible types: 'Cardinal' and 'TSearchRec'. Я эту строку просто "закомментировывал", и ничего страшного не происходило:) -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата На выделенной строке выдаёт Incompatible types: 'Cardinal' and 'TSearchRec' А в Uses поменять местами SysUtils и Windows (чтоб SysUtils был подключен ПОСЛЕ Windows) не догадался? Есть же WinAPI-функция FindClose, которая получает хендл файла. А в Паскаль/Дельфи есть не очень приятная особенность: описание функции в модуле подключенном ПОЗЖЕ перекрывает описание, имеющееся в модуле, подключенном РАНЬШЕ. Так что либо как я написал выше (менять модули местами при подключении), либоSysUtils.FindClose(SearchRec);, но вызывать ее надо. Иначе получишь утечку ресурсов... |
Unconnected |
![]()
Сообщение
#12
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
А в Uses поменять местами SysUtils и Windows (чтоб SysUtils был подключен ПОСЛЕ Windows) не догадался? Такую апи-функцию знаю, но всё равно ни за что бы не догадался:) Сообщение отредактировано: Unconnected - 7.11.2009 22:20 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 18:32 |