本文整理汇总了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;
}