Ввод папки с путем к шаблону — C++ MFCC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ввод папки с путем к шаблону — C++ MFC

Сообщение Anonymous »

Я использую Visual Studio C++ 2017 Professional и MFC

Я работаю над проектом, в котором есть функция, которая собирает пути к файлам (например, C:/foo1/foo2/foo3.txt) в виде строк, если файл с этим путем существует (найден с помощью библиотеки файловой системы).
Поначалу это выглядит просто, пока я не вижу, что пути к файлам часто представляют собой просто (из-за отсутствия лучшего слова) шаблоны.
Моей программе задан путь к файлу шаблона, например этот:

Код: Выделить всё

C:/User/Documents/%A/%B.txt
, где %A представляет год (для которого моя программа имеет диапазон и повторяется каждый год по сравнению с папкой шаблона), а %B — это месяц, снова итерация.
Это становится только сложнее, потому что теперь мы добавляем еще два символа шаблона: * и ?.
Например:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»