Boost Filesystem flowly_caronical不会在没有父文件夹的情况下解决相对路径

Boost filesystem weakly_canonical does not resolve relative paths without parent folders

本文关键字:文件夹 情况下 解决 路径 相对 flowly Filesystem caronical Boost      更新时间:2023-10-16

我想在Windows和Linux中使用Boost Filesystem的相对路径获得绝对的规范路径。我希望它也适用于不存在的路径。

我使用的是flowly_canonical(路径相对路径(,自增强1.60以来可用。但它的行为不像预期(至少在Windows中(。

通过无父文件夹的相对路径,即``foo''之类的原始文件名或文件夹名称,flowly_caronical返回相同的未触摸路径(在这种情况下为" foo"(,而绝对(Path相对路径(预示当前路径(正如我所期望的((" current_dir/foo"(。

所以最后,我被迫首先称呼绝对,然后弱canical以使其起作用。

请参阅带有两种情况的摘要。

#include <string>
#include <iostream>
#include <boost/filesystem.hpp>
using boost::filesystem;
path relativePath("foo");
path canonical_path = weakly_canonical(relativePath);
path abs_canonical_path = weakly_canonical(absolute(relativePath));
std::cout << "Using weakly_canonical: "
          << canonical_path.string()
          << std::endl;
std::cout << "Using weakly_canonical and absolute: " 
          << abs_canonical_path.string()
          << std::endl;

例如,如果current_path为" c: path to some folder",我正在获得:

  1. selverpath =" ./foo"
Using weakly_canonical: C:pathtosomefolderfoo
Using weakly_canonical and absolute: C:pathtosomefolderfoo
  1. 相对路径=" ../foo"
Using weakly_canonical: C:pathtosomefoo
Using weakly_canonical and absolute: C:pathtosomefoo
  1. 相对路径=" foo"
Using weakly_canonical: foo
Using weakly_canonical and absolute: C:pathtosomefolderfoo

最后一个案例让我感到困惑,因为我希望flowly_caronical也可以预先使用当前的工作dir。

一起使用绝对和弱的canonical是否正确?还是我滥用fielly_caronical?

文档说:'返回:由在由canonical函数调用CC_1函数的结果组成的路径组成的路径中如果有的话,p的元素不存在。

重要的位置是canonical(确实是构造绝对路径(仅当p的领先元素实际上存在时才调用。

如果您在不存在第一个元素的相对路径上调用weakly_canonical,则根本不调用canonical,如果使用点,则仅调用以下部分。因此,如果此路径没有,weakly_canonical("foo")可以返回foo存在或如果确实存在的绝对路径。

对于std::filesystem::weakly_canonical的不同实现,我可以测试。

如果您想确保具有规范路径的绝对形式,则可以在weakly_canonical之后致电absolute

boost::filesystem::absolute(boost::filesystem::weakly_canonical("foo"))

好吧,文档说" 返回p symlinks已解决的p,结果归一化"它并不是说它会成为完整的路径。您的" foo"在路径上没有符号链接,没有点。

相关文章: