Моя проблема примерно такая: чтобы определить, идентичны ли два пути на платформе windows, пути сравниваются без учета регистра, например. «C: \ test.txt» и «C: \ Test.txt» преобразуются в один и тот же элемент файла. Я мог бы легко решить эту проблему, используя, например, std::filesystem::equal
, но для этой конкретной проблемы я бы хотел немного сэкономить на обходе ОС (работа на холостом ходу и выполнение 100+ сравнений на каждом l oop - я боюсь, что это произойдет быть заметным)
using path = std::filesystem::path;
const bool result = (path("C:\\test.txt").lexically_normal().make_preferred().native() == path("C:\\Test.txt").lexically_normal().make_preferred().native());
При сравнении std::filesystem::path
даже при лексической нормализации путем вызова lexical_normal
выполняется общий c способ и, таким образом, рассматривается случай. Это, конечно, имеет смысл, но кроме сравнения строк сам я не вижу способа сделать это с библиотекой без сравнения: можно ли каким-то образом переопределить сравнение путей?
Я также изучил boost::filesystem
, но, насколько я могу судить, проблема тоже не решается.