文件名

Filename函数位于类Filename中。默认情况下,此类不是打开的,建议通过显式限定调用以下函数 Filename:: .

路径分隔符

返回系统路径分隔符的函数, / 在Unix上,在Windows上为“\”:

fun sep: 1 -> string;

路径类型

一种检测文件名是绝对文件名还是相对文件名的函数

fun is_absolute_filename : string -> bool;

返回文件系统根目录名的函数, / 在Unix和Windows上为“C:”:

virtual fun root_subdir : string -> string;

二进制代码文件扩展名

返回扩展名(包括点)的函数

virtual fun executable_extension : 1 -> string;
virtual fun static_object_extension: 1 -> string;
virtual fun dynamic_object_extension: 1 -> string;
virtual fun static_library_extension: 1 -> string;
virtual fun dynamic_library_extension: 1 -> string;

路径分割

split1返回一对由目录名和basename组成的对,它们之间的分隔符将丢失,除非是“/x”,其中“/”作为目录名。如果没有分隔符,则路径为基名,目录名为空字符串(不是!!!!)

fun split1(s:string): string * string;

将文件名拆分为组件列表。

fun split(s:string)=> split (s, List::Empty[string]);

获取路径(最后一个组件)的基名。

fun basename(s:string) :string;

获取路径的目录名(除最后一个组件外的所有目录名)。

fun dirname(s:string) : string;

返回路径中所有目录名的列表。例如a/b/c给出“a”、“a/b”

fun directories (s:string) : list[string];

分开分机。包括圆点。不变量:输入=基名称+扩展名。向后工作,直到碰到点、路径分隔符或数据结尾。如果是一个点,则去掉它和字符串的尾部,否则返回原始字符串。

fun split_extension (s:string): string * string;

从文件名中删除扩展名(如果有)。

fun strip_extension (s:string) => s.split_extension.0;

如果有扩展名,请获取扩展名。包括圆点。

fun get_extension (s:string) => s.split_extension.1;

路径连接

将两个路径名合并为一个路径名。split和join在逻辑上是相反的,但是join不是关联的:join(“x”,join(“,”y“))=”x/y“,而join(join(“x”,“”),“y”)=“x//y”,因为split将组件从RHS中拉出,所以我们必须从左边将它们折回来

fun join(p:string, b:string) : string;

请注意,通常在代码中编写:

fun /(p:string, b:string) => Filename::join (p,b);

将列表中的所有字符串连接到一个路径名中。

fun join(ps: List::list[string]): string;