path

std.types.path

def Path

pub def Path: str

以空字符结尾的文件系统路径

fun separator

pub fun separator() u8;

平台路径分隔符字符,由构造时发出

ret:目标平台首选的分隔符字节

fun is_separator

pub fun is_separator(c: u8) bool;

检查 c 是否为目标平台上的路径组件分隔符

Windows 同时接受 /\;POSIX 仅将 / 视为分隔符。

c:要测试的字节 ret:当 c 是分隔符时为 true

fun has_separator

pub fun has_separator(p: Path) bool;

检查 p 是否包含任何路径分隔符

ret:当 p 的至少一个字节分隔了组件时为 true

fun is_empty

pub fun is_empty(p: Path) bool;

检查路径是否为空或 nil

ret:如果路径为 nil 或长度为零则为 true

fun is_abs

pub fun is_abs(p: Path) bool;

检查路径是否为绝对路径

当路径以分隔符(POSIX 或 UNC 根目录)开头,或者在 Windows 上以盘符根目录 'X:\' / 'X:/' 开头时,它就是绝对路径。裸盘符引用 'C:''C:foo' 是盘符相对路径,而不是绝对路径。

ret:当 p 是绝对路径时为 true

fun is_root

pub fun is_root(p: Path) bool;

检查路径是否为根单元

p 仅包含分隔符,或者(在 Windows 上)恰好是盘符或 UNC 根目录后跟任意尾随分隔符时为 true

ret:当 p 恰好是根单元时为 true

fun seg_count

pub fun seg_count(p: Path) usize;

计算路径的净目录深度

遍历 p 中由 is_separator 分隔的片段:真实的片段增加一层,'.' 片段没有贡献,'..' 片段爬升一层,并带有夹具(clamped)使得深度绝不会低于零。空运行(前导、尾随或重复的分隔符)没有贡献。结果是 p 从其锚点(anchor)下降了多远 —— 即从 p 爬回该锚点所需的 '..' 计数 —— 这就是为什么 '..' 会递减,且下限在根目录处保持相对爬升的原因。

p:要测量的路径 ret:净片段深度,对于 nil、空路径、根路径或完全向上爬升的路径为零

fun filename

pub fun filename(p: Path) str;

返回路径的最后组件(文件名)

返回指向 p 内部的指针(无分配)。对于空路径返回 nil,对于以分隔符结尾的路径返回空字符串。

p:从中提取文件名的路径 ret:指向 p 中文件名的指针,或 nil

fun extension

pub fun extension(p: Path) str;

返回不带前导点(.)的文件扩展名

返回指向 p 内部的指针(无分配)。如果没有扩展名(没有点,或者点是文件名的第一个字符),则返回 nil

p:从中提取扩展名的路径 ret:指向 p 中扩展名的指针,或 nil

fun stem

pub fun stem(a: *allocator.Allocator, p: Path) R.Result[Path, str];

返回不带扩展名的文件名(主干 stem)

"foo/bar.txt""bar", "foo/.hidden"".hidden", "foo/bar""bar"

a:结果的分配器 p:从中提取主干的路径 ret:主干,或错误消息

fun clone

pub fun clone(a: *allocator.Allocator, p: Path) R.Result[Path, str];

使用提供的分配器复制路径

a:新路径的分配器 p:要克隆的路径(nil 返回 nilret:克隆后的路径,或错误消息

fun join

pub fun join(a: *allocator.Allocator, left: Path, right: Path) R.Result[Path, str];

使用平台分隔符连接两个路径段

a:结果路径的分配器 left:左路径段 right:右路径段 ret:连接后的路径,或错误消息

fun parent

pub fun parent(a: *allocator.Allocator, p: Path) R.Result[Path, str];

返回路径的父目录

a:结果路径的分配器 p:获取其父目录的路径 ret:父目录路径,或错误消息

fun resolve

pub fun resolve(a: *allocator.Allocator, base: Path, p: Path) R.Result[Path, str];

针对 base 解析 p:绝对路径 p 会被原样克隆,相对路径 p 会连接到 base

a:结果的分配器 base:相对路径 p 的基准目录 p:要解析的路径 ret:解析后的路径,或错误