1#ifndef NEFORCE_CORE_FILE_PATH_HPP__
2#define NEFORCE_CORE_FILE_PATH_HPP__
14NEFORCE_BEGIN_NAMESPACE__
51#ifdef NEFORCE_PLATFORM_WINDOWS
53#elif defined(NEFORCE_PLATFORM_LINUX)
85 const string* path_ =
nullptr;
118 if (path_ ==
nullptr || path_->empty() || start_ >= path_->size()) {
144 if (start_ >= path_->size()) {
173 if (done_ && b.done_) {
176 if (path_ != b.path_) {
179 return start_ == b.start_;
222 path& operator=(const
path&) = default;
223 path& operator=(
path&&) noexcept = default;
229 NEFORCE_NODISCARD const
string&
str() const noexcept {
return path_; }
241 NEFORCE_NODISCARD
const char*
data() const noexcept {
return path_.data(); }
247 NEFORCE_NODISCARD
bool empty() const noexcept {
return path_.empty(); }
396 NEFORCE_NODISCARD
bool exists() const noexcept;
408 NEFORCE_NODISCARD
bool is_file() const noexcept;
415 NEFORCE_NODISCARD static
bool exists(const
string&
path) noexcept;
429 NEFORCE_NODISCARD static
bool is_file(const
string&
path) noexcept;
441 explicit operator
string_view() const noexcept {
return path_.view(); }
473 void swap(
path& other)
noexcept { path_.swap(other.path_); }
476#ifdef NEFORCE_STANDARD_17
483NEFORCE_END_NAMESPACE__
constexpr basic_string_view view(const size_type off, const size_type count=npos) const
获取子视图
forward_iterator_tag iterator_category
迭代器类别
reference operator*() const noexcept
解引用操作符
split_iterator & operator++()
前置递增操作符
bool operator==(const split_iterator &b) const noexcept
相等比较操作符
split_iterator operator++(int)
后置递增操作符
split_iterator() noexcept=default
默认构造函数
string_view value_type
值类型
ptrdiff_t difference_type
差值类型
bool operator!=(const split_iterator &b) const noexcept
不等比较操作符
path()=default
默认构造函数,创建空路径
static path current_executable_path()
获取当前可执行文件路径
path(string path) noexcept
从字符串构造路径
string_view stem() const noexcept
获取文件主名(不含扩展名)
bool exists() const noexcept
检查路径是否存在
bool empty() const noexcept
检查路径是否为空
path lexically_normal() const
规范化路径
vector< path > children(bool include_hidden=false) const
获取直接子路径列表(非递归)
path(const string_view path)
从字符串视图构造路径
size_t to_hash() const
计算哈希值
static path current_path()
获取当前工作目录
static constexpr char preferred_separator
系统首选路径分隔符
bool equal_to(const path &rhs) const
相等比较
vector< path > child_files(bool include_hidden=false) const
获取直接子文件路径列表
split_iterator end() const
获取结束路径组件迭代器
string_view filename() const noexcept
获取文件名
string_view extension() const noexcept
获取文件扩展名
split_iterator begin() const
获取起始路径组件迭代器
bool is_file() const noexcept
检查路径是否为普通文件
bool less_than(const path &rhs) const
小于比较
path parent_path() const
获取父路径
bool is_directory() const noexcept
检查路径是否为目录
string_view view() const noexcept
获取路径字符串视图
vector< path > child_dirs(bool include_hidden=false) const
获取直接子目录路径列表
path_tree to_tree() const
扫描此路径(必须为目录)并返回路径树
string to_string() const
转换为字符串
void swap(path &other) noexcept
交换两个路径
static path temp_directory_path()
获取临时目录路径
path relative(const path &base) const
获取相对于另一路径的路径
path(const char *path)
从C风格字符串构造路径
const char * data() const noexcept
获取C风格字符串
const string & str() const noexcept
获取路径字符串
path absolute(const path &base=current_path()) const
获取绝对路径
static constexpr size_t buffer_size
文件操作缓冲区大小
static constexpr string_view spliter
路径分隔符集合
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图