使用boost::filesystem扩展用户路径

12

boost::filesystem中是否有功能可以扩展以用户主目录符号(Unix上的~)开头的路径,类似于Python提供的os.path.expanduser函数?


你尝试过使用http://www.boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/reference.html#canonical吗? - Hamdor
@Hamdor 我尝试过类似 canonical(path("~/test.txt")) 的东西,但是没有成功。使用方法不正确吗? - Daniel
我怀疑没有。但是也可以参考https://dev59.com/W1TTa4cB1Zd3GeqPoQAw - WhiteViking
1个回答

8

编号。

但您可以通过执行以下操作来实现它:

  namespace bfs = boost::filesystem;
  using std;

  bfs::path expand (bfs::path in) {
    if (in.size () < 1) return in;

    const char * home = getenv ("HOME");
    if (home == NULL) {
      cerr << "error: HOME variable not set." << endl;
      throw std::invalid_argument ("error: HOME environment variable not set.");
    }

    string s = in.c_str ();
    if (s[0] == '~') {
      s = string(home) + s.substr (1, s.size () - 1);
      return bfs::path (s);
    } else {
      return in;
    }
  }

此外,请看@WhiteViking建议的类似问题

请注意,这不是跨平台的,也不能保证可行:https://dev59.com/gnE85IYBdhLWcg3w6n90#3733955 - Zoe stands with Ukraine
2
这实际上是完全错误的。例如,如果您以用户“admin”身份登录,则会将“〜celmin / some / path”扩展为“/ home / admin / celmin / some / path”,而不是正确的“/ home / celmin / some / path”。即使您不想处理扩展另一个用户的目录,您也应该至少检查第二个字符是否为/。(还要注意,这仅适用于POSIX平台。) - celticminstrel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接