Завершено
4
05.04.2020, 10:27
04.05.2020, 07:40
Необходимо реализовать поиск файла / файлового пути по маске.
Маска содержит такие же символы, какие содержит путь / имя файла, а также может содержать два вида символов-джокеров: * и ?. Символ ? заменяет один любой символ, а * — любое количество символов.
Текстовый файл, содержащий в первой строке маску поиска, а в последующих строках набор имён файлов или
файловых путей (в Windows такой набор путей можно получить, например, командой dir /B/S).
Например
*bit*.*
D:\OOP.2014\bmp
D:\OOP.2014\example.cpp
D:\OOP.2014\include
D:\OOP.2014\lib
D:\OOP.2014\src
D:\OOP.2014\vs2008
D:\OOP.2014\bmp\kitty-04-core.bmp
D:\OOP.2014\include\libbitmap.h
D:\OOP.2014\lib\libbitmapd.lib
D:\OOP.2014\src\libbitmap.cpp
D:\OOP.2014\vs2008\libbitmap.sln
D:\OOP.2014\vs2008\libbitmap.vcproj
D:\OOP.2014\vs2008\out.bmp
D:\OOP.2014\vs2008\test.vcproj
Файл может содержать пустые и невалидные строки. Программа должна корректно это обрабатывать.
Необходимо разработать программу, которая проверяет соответствие файлового пути заданной маске:
Маске file??.txt соответствуют файлы file00.txt, fileab.txt, а файлы 00.txt и fileabc.txt не соответствуют.
Маске a*b.* соответствуют файлы aab.doc, abvgdb.jpg, а файл aaa.aaa не соответствует.
Поскольку в строке пути в зависимости от контекста может в качестве разделителя использоваться как /, так и \,
то следует предусмотреть "взаимозаменяемость" этих символов: маске a\b/c
должны соответствовать строки a\b\c, a/b/c, a/b\c, и, конечно a\b/c.
Текстовый файл с теми путями из входного списка, которые соответствуют маске.
В приведённом выше примере:
D:\OOP.2014\include\libbitmap.h
D:\OOP.2014\lib\libbitmapd.lib
D:\OOP.2014\src\libbitmap.cpp
D:\OOP.2014\vs2008\libbitmap.sln
D:\OOP.2014\vs2008\libbitmap.vcproj
Для всех разработанных модулей должны быть созданы наборы unit тестов. Функций ввода/вывода нужно тестировать с помощью std::stringstream.
Обработка полных путей к файлам (\path\to\file.txt). В этом случае символы * и ? действуют только внутри одного уровня иерархии (для указанного имени файла маска \path\*\*.txt сработает, а просто *.txt — нет).
Также добавляется ещё один тип символа-джокера — **. Он может заменить любое количество любых подкаталогов в пути файла. Например, **\*.txt будет включать в себя \rather\long\path\to\file.txt.