dar*_*une 5 c++ c++17 std-filesystem
我的问题如下:为了确定 Windows 平台上的两个路径是否相同,比较路径时不区分大小写,ei。“C:\test.txt”和“C:\Test.txt”解析为相同的文件元素。我可以通过使用std::filesystem::equal示例轻松解决这个问题,但对于这个特定问题,我想在操作系统往返上节省一点(在空闲状态下运行并在每个循环上进行 100 多次比较 - 我担心它会很明显)
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());
Run Code Online (Sandbox Code Playgroud)
在比较时std::filesystem::path,即使通过调用进行词法规范化lexical_normal也是以通用方式完成的,因此也会考虑这种情况。这当然是有道理的,但除了我自己进行字符串比较之外,我看不到一种方法可以在不进行比较的情况下使用库来执行此操作:是否有可能以某种方式覆盖路径的比较方式?
我也调查过boost::filesystem,但据我所知也没有解决这个问题。
区别的全部要点path/filesystem是区分作为path用于存储可以与任何文件系统一起操作和使用的路径的通用机制的类型,以及filesystem可能根据特定实现而不同的特定操作。两个不相等的path对象可以被一个文件系统考虑filesystem::equivalent,但不能被另一个文件系统考虑,这只是协议的一部分。
没有机制可以执行path非文件系统操作的文件系统感知“规范化”。