c++ - 为什么尾随分隔符会改变 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
并没有反映这种说法。
所以我的问题有两个:
为什么尾随分隔符会影响行为?我只是不太明白为什么
".."
在这种情况下它会增加一个目录。如何
path
在我的程序中全局忽略或规范尾部斜杠?例如,在我构造path
对象之前“清理”我的路径字符串会带来太多的维护负担,所以如果可能的话,我需要一些更固有的东西。
这是我一直用于测试的实时样本。
解决方案
在发布此问题后不久,我发现这是一个错误,在此处报告。我最初认为我可能做错了什么。即使我的问题在这一点上没有多大意义,我也不想删除它以防其他人遇到同样的问题。
推荐阅读
- amazon-ecs - 如何在 CodePipeline 中处理 ECS 部署以更改任务定义
- python - 即使已安装,也无法在 jupyter notebbok 中导入 numpy 库
- python - 所需给定功能的说明
- javascript - CEFSharp Dropdown(组合框,选择)向下打开超过浏览器边缘并被剪裁
- ios - 为什么 UIActivityViewController 会在 Presenter 上调用 viewWillDisappear()?
- spring-boot - MDCFilter 和 Spring webflux 使用 reactor netty 和 spring security oauth
- regex - 在 Regex 中第一次出现时停止
- xamarin - 如何从 xamarin android web 视图中加载的登录页面的用户名文本框中读取值
- c# - Azure 表存储 SDK - 清空表
- docker - 如何使用 Netty 连接到运行 HTTP 服务器的 UNIX 域套接字?