使用boost :: filesystem :: path作为std :: map中的键

时间:2012-12-07 11:23:27

标签: windows boost boost-filesystem

所以std :: map想要订购密钥类型,但我遇到了问题:

“a / b”< “a / c”< “a // b”但fs :: equivalent(“a / b”,“a // b”)

“a / b”< “a / c”< “a \ b”但fs :: equivalent(“a / b”,“a \ b”)

我该如何规范路径足以创建排序?这甚至可能吗?我尝试在自定义比较运算符中使用path :: generic_string(),但它不起作用。 fs :: equivalent()也没有帮助,因为对std :: map实现相等是不够的,它需要一个排序。这也是为什么这个问题不是How do I "normalize" a pathname using boost::filesystem?重复的原因。

上下文:仅限Windows,Boost 1.49,filesystem3。

1 个答案:

答案 0 :(得分:2)

要使路径具有可比性,您需要将它们转换为规范表示,然后通过字符串进行比较。规范路径是绝对的,规范化的并且删除了符号链接。 Boost提供规范的AFAIK。由于需要解析符号链接,因此调用规范需要访问文件系统。