当前位置: 首页>>代码示例>>C++>>正文


C++ path::has_root_name方法代码示例

本文整理汇总了C++中boost::filesystem::path::has_root_name方法的典型用法代码示例。如果您正苦于以下问题:C++ path::has_root_name方法的具体用法?C++ path::has_root_name怎么用?C++ path::has_root_name使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在boost::filesystem::path的用法示例。


在下文中一共展示了path::has_root_name方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: canonicalize

// Resolve symlinks
fs::path fs_base::canonicalize(fs::path in) {
  fs::path accum;

  if (!in.has_root_path()) {
    // dir is relative!
    accum = fs::system_complete(".");
    if (*--accum.end() == ".")
      accum = accum.parent_path();
  }
#ifdef WIN32
  // No C:/ in the path
  else if (!in.has_root_name()) {
    accum = fs::system_complete(".").root_name() / accum;
  }
#endif

  BOOST_FOREACH(fs::path seg, in) {
    if (seg == ".")
      continue;

    // We've already canon'd the path's parent, so just remove the last dir
    if (seg == "..") {
      accum = accum.parent_path();
      continue;
    }

    accum /= seg;
#ifndef WIN32
    if (fs::is_symlink(accum)) {
      char buff[PATH_MAX];
      ssize_t len = readlink(accum.string().c_str(), buff, PATH_MAX);
      if (len == -1) {
        format fmt = format(error_fmt) % "canonical"
                                       % std::strerror(errno)
                                       % accum;
        throw exception(fmt.str());
      }
      fs::path link_path = std::string(buff, len);

      // An absolute link
      if (link_path.has_root_path())
        accum = canonicalize(link_path);
      else {
        accum.remove_filename();
        accum = canonicalize(accum / link_path);
      }
    }
#endif
  }

  // This trickery forces a trailing / onto the dir
  if (fs::is_directory(accum)) {
    accum /= ".";
    accum.remove_filename();
  }

  return accum;
}
开发者ID:,项目名称:,代码行数:59,代码来源:


注:本文中的boost::filesystem::path::has_root_name方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。