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

Dan*_*iel 9 c++ boost-filesystem

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

gau*_*teh 6

没有.

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

  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;
    }
  }
Run Code Online (Sandbox Code Playgroud)

另外,看看@WhiteViking提出的类似问题.

  • 这实际上是完全错误的。例如,如果您以用户“admin”身份登录,它会将“~celmin/some/path”扩展为“/home/admin/celmin/some/path”,而不是正确的“/home/celmin/some” /小路”。即使您不想处理扩展另一个用户的目录,您也应该至少检查第二个字符是否是/。(正如前面提到的,这只适用于 POSIX 平台。) (2认同)