Я работаю над проектом, в котором есть функция, которая собирает пути к файлам (например, C:/foo1/foo2/foo3.txt) в виде строк, если файл с этим путем существует (найден с помощью библиотеки файловой системы).
Поначалу это выглядит просто, пока я не вижу, что пути к файлам часто представляют собой просто (из-за отсутствия лучшего слова) шаблоны.
Моей программе задан путь к файлу шаблона, например этот:
Код: Выделить всё
C:/User/Documents/%A/%B.txtЭто становится только сложнее, потому что теперь мы добавляем еще два символа шаблона: * и ?.
Например:
Код: Выделить всё
C:/User/Documents/*_%A_??_*/%B_*.txtЗдесь * представляет 0 или более символов, а ? представляет один символ.
Итак, в этом примере следует найти и сохранить в виде строки путь к файлу, например: C:/User/Documents/smile_2022_A1_/07_ABCDEFGHIJKLMNOP.txt.
Я могу отделите путь к файлу с помощью токенизации, то есть у меня уже есть функция, которая собирает вектор, заполненный, скажем, C:, foo1, foo2, foo3.txt. Благодаря этому я могу перебирать вектор либо с помощью цикла, либо рекурсивно входить в папку, пока я:
- достиг тупика (то есть папка или файл не существует)
- достигну нужного файла и сохранил весь его путь в виде строки
- если * или ? содержат _
- если имя папки или файла просто не содержит _
Причина, по которой я говорю «нет регулярного выражения», заключается в том, что, насколько я понимаю, оно немного более строгое, когда дело доходит до сравнения файлов. Он ожидает, что строка будет записана определенным, но последовательным образом. Однако в моем случае я не могу ожидать, что пользователь будет последовательно называть свои папки...
Подробнее здесь: https://stackoverflow.com/questions/731 ... path-c-mfc
Мобильная версия