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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2015, 12:49   #1
KOHCEPBATOP
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 17
По умолчанию FindFirstFile/FindNextFile возвращает лищние файлы

С помощью функций FindFirstFile/FindNextFile ищу файлы. Но почему то возвращаются лишние файлы.
Например, задаю маску "*.abc", а возвращаются файлы как будто я задал "*.abc*" (кроме, "a.abc", возвращаются "a.abcd", "a.abce" и т.п.).
Это баг или фича?
KOHCEPBATOP вне форума Ответить с цитированием
Старый 12.11.2015, 13:17   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А что ваши "лишние" не попадают под шаблон, а? Вы ж не указали, что после абц конец строки.
p51x вне форума Ответить с цитированием
Старый 12.11.2015, 13:18   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
KOHCEPBATOP
Такого быть не должно.
Покажи код.
Цитата:
Вы ж не указали, что после абц конец строки.
А как ты это определил? О_о
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2015, 13:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

p51x, думаю, что Вы ошибаетесь. я лично не слышал, чтобы в маске поиска файлов был специальный символ "конец строки"!

KOHCEPBATOP, думаю, что скорее всего это баг (точнее, издержки политики, когда Гейтс придумал хранить в имени файла после точки т.н. "расширение", обозначающее тип файла.
В любом случае - хоть это баг, хоть фича - вам нужно отфильтровывать нужное на клиенте. вот и все дела

Виталий, положите в папку файлики (например, aaaa.abc abc.txt adcd.txt bbb.abcde dd.abcd )
и сделайте банальный dir с маской:
Код:
D:\temp1\>dir *.abc /b
aaaa.abc
bbb.abcde
dd.abcd

Последний раз редактировалось Serge_Bliznykov; 12.11.2015 в 13:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2015, 14:07   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
сделайте банальный dir с маской
Хы... Забавная шутка )
Ай да Билли... Ай да... кхм-гм сынуля
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2015, 14:31   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Что-то я увлекся. Итак: все это из-за совместимости... легасси, Билли, легасси. Когда-то был формат файла только 8.3, потом его расширили, но теперь поиск возвращает все.
p51x вне форума Ответить с цитированием
Старый 12.11.2015, 14:52   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
The search includes the long and short file names
Такая фраза есть в MSDN для FindFirstFile , которая вызывается в недрах FindFirst. Наскока понял, в коротком формате ищется, отсюда и грабли
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2015, 19:28   #8
KOHCEPBATOP
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
KOHCEPBATOP, думаю, что скорее всего это баг (точнее, издержки политики, когда Гейтс придумал хранить в имени файла после точки т.н. "расширение", обозначающее тип файла.
В любом случае - хоть это баг, хоть фича - вам нужно отфильтровывать нужное на клиенте. вот и все дела

Виталий, положите в папку файлики (например, aaaa.abc abc.txt adcd.txt bbb.abcde dd.abcd )
и сделайте банальный dir с маской:
Код:
D:\temp1\>dir *.abc /b
aaaa.abc
bbb.abcde
dd.abcd
Печально. Если в расширении внутри маска используется, то проверка нетривиальная получается.
Спасибо за ответы.
KOHCEPBATOP вне форума Ответить с цитированием
Старый 23.11.2015, 09:58   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,218
По умолчанию

Конкретно в вашем случае можно сделать дополнительную проверку каждого найденного файла:

Код:
if ExtractFileExt(Name) = '.abc' then ...
Arigato вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CopyFile (FindFirstFile, FindNextFile) копирование файлов из поддиректорий andrei_seleznev C++ Builder 3 18.11.2012 16:33
FindFirstFile/FindNextFile. Намудрил что-то с адресами при передаче в функцию RAZOR1703 Win Api 2 06.12.2011 04:44
FindFirstFile не пропускает папки Nitrino Win Api 2 20.06.2010 20:03
FindFirstFile Vasyannm Общие вопросы C/C++ 3 20.05.2010 12:52
FindFirstFile Д'якон Win Api 2 14.03.2010 00:29