词法比较 std::filesystem::path 不区分大小写?
Lexical compare std::filesystem::path case insensitive?
我的问题类似于以下内容:要确定 windows 平台上的两条路径是否相同,比较路径时不区分大小写,ei。 "C:\test.txt" 和 "C:\Test.txt" 解析为相同的文件元素。例如,我可以通过使用 std::filesystem::equal
轻松解决这个问题,但是对于这个特定问题,我想节省一些 OS 往返(运行 空闲并在每个循环上进行 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
,但据我所知也没有解决这个问题。
path/filesystem
区别的全部意义在于区分 path
类型作为一种通用机制,用于存储可以在任何文件系统中操作和使用的路径,以及 filesystem
-特定操作可能因特定实现而异。两个不相等的 path
对象可以被一个文件系统视为 filesystem::equivalent
而另一个文件系统则不能,这只是交易的一部分。
没有机制可以执行文件系统感知 path
"normalization" 这不是文件系统操作。
我的问题类似于以下内容:要确定 windows 平台上的两条路径是否相同,比较路径时不区分大小写,ei。 "C:\test.txt" 和 "C:\Test.txt" 解析为相同的文件元素。例如,我可以通过使用 std::filesystem::equal
轻松解决这个问题,但是对于这个特定问题,我想节省一些 OS 往返(运行 空闲并在每个循环上进行 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
,但据我所知也没有解决这个问题。
path/filesystem
区别的全部意义在于区分 path
类型作为一种通用机制,用于存储可以在任何文件系统中操作和使用的路径,以及 filesystem
-特定操作可能因特定实现而异。两个不相等的 path
对象可以被一个文件系统视为 filesystem::equivalent
而另一个文件系统则不能,这只是交易的一部分。
没有机制可以执行文件系统感知 path
"normalization" 这不是文件系统操作。