2

我的问题类似于以下内容:要确定 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());

在比较std::filesystem::path时,即使通过调用lexical_normal进行词法规范化也是以通用方式完成的,因此会考虑这种情况。这当然是有道理的,但是除了对自己进行字符串比较之外,我看不到在不比较的情况下对库进行此操作的方法:是否有可能以某种方式覆盖路径的比较方式?

我也调查boost::filesystem过,但据我所知也没有解决这个问题。

4

1 回答 1

0

区别的全部意义在于path/filesystem区分path类型作为一种通用机制,用于存储可以与任何文件系统一起操作和使用的路径,以及filesystem可能因特定实现而有所不同的特定操作。两个不相等的path对象可以被filesystem::equivalent一个文件系统考虑,但不能被另一个文件系统考虑,这只是交易的一部分。

没有机制可以执行path不是文件系统操作的文件系统感知“规范化”。

于 2020-04-21T20:14:25.990 回答