首页 > 解决方案 > 为什么尾随分隔符会改变 Boost.Filesystem 中相对路径转换的行为?

问题描述

给定以下代码,

namespace fs = boost::filesystem;
fs::path parentPath("/home/user1/");
fs::path childPath("/home/user1/Downloads/Books");
std::cout << childPath.lexically_relative(parentPath) << '\n';

我希望输出是"Downloads/Books",但实际上是"../Downloads/Books"。如果我将其更改parentPath"/home/user1"(删除尾随分隔符),我会得到预期的输出。

在我的真实代码中,路径通常以数据字符串的形式出现。在我的上下文中,末尾的斜杠是无意的,出于任何逻辑的目的都应该忽略。基本上,在我的程序"/home/user1"中与"/home/user1/". 然而, 的逻辑boost::filesystem::path并没有反映这种说法。

所以我的问题有两个:

  1. 为什么尾随分隔符会影响行为?我只是不太明白为什么".."在这种情况下它会增加一个目录。

  2. 如何path在我的程序中全局忽略或规范尾部斜杠?例如,在我构造path对象之前“清理”我的路径字符串会带来太多的维护负担,所以如果可能的话,我需要一些更固有的东西。

这是我一直用于测试的实时样本。

标签: c++boost-filesystem

解决方案


在发布此问题后不久,我发现这是一个错误,在此处报告。我最初认为我可能做错了什么。即使我的问题在这一点上没有多大意义,我也不想删除它以防其他人遇到同样的问题。


推荐阅读