模块 Filename

module Filename: sig .. end

文件名操作。


val current_dir_name : string

当前目录的传统名称(例如 Unix 中的 .)。

val parent_dir_name : string

当前目录父目录的传统名称(例如 Unix 中的 ..)。

val dir_sep : string

目录分隔符(例如 Unix 中的 /)。

val concat : string -> string -> string

concat dir file 返回一个文件名,该文件名指定目录 dir 中的文件 file

val is_relative : string -> bool

如果文件名相对于当前目录,则返回 true,如果文件名是绝对的(即在 Unix 中以 / 开头),则返回 false

val is_implicit : string -> bool

如果文件名是相对的并且不以对当前目录的显式引用开头(Unix 中的 ./../),则返回 true,如果文件名以对根目录或当前目录的显式引用开头,则返回 false

val check_suffix : string -> string -> bool

check_suffix name suff 如果文件名 name 以后缀 suff 结尾,则返回 true

在 Windows 端口(包括 Cygwin)下,比较不区分大小写,依赖于 String.lowercase_ascii。请注意,这与 Windows 中对不区分大小写文件名等效性的解释并不完全匹配。

val chop_suffix : string -> string -> string

chop_suffix name suff 从文件名 name 中删除后缀 suff

val chop_suffix_opt : suffix:string -> string -> string option

chop_suffix_opt ~suffix filename 如果可能,从 filename 中删除后缀,或者如果文件名不以后缀结尾,则返回 None

在 Windows 端口(包括 Cygwin)下,比较不区分大小写,依赖于 String.lowercase_ascii。请注意,这与 Windows 中对不区分大小写文件名等效性的解释并不完全匹配。

val extension : string -> string

extension namename0 的最短后缀 ext,其中

  • name0name 的最长后缀,不包含目录分隔符;
  • ext 以句点开头;
  • extname0 中至少由一个非句点字符紧接。

如果不存在这样的后缀,则 extension name 为空字符串。

val remove_extension : string -> string

返回给定文件名,不包括其扩展名,如 Filename.extension 中所定义。如果扩展名为空,则函数返回给定文件名。

对于任何文件名 s,以下不变式成立

remove_extension s ^ extension s = s

val chop_extension : string -> string

Filename.remove_extension 相同,但如果给定名称的扩展名为空,则引发 Invalid_argument

val basename : string -> string

将文件名拆分为目录名 / 基本文件名。如果 name 是一个有效的文件名,则 concat (dirname name) (basename name) 返回一个与 name 等效的文件名。此外,在将当前目录设置为 dirname name(使用 Sys.chdir)之后,对 basename name(这是一个相对文件名)的引用与调用 Sys.chdir 之前对 name 的引用指定相同的文件。

此函数符合 POSIX.1-2008 对 basename 实用程序的规范。

val dirname : string -> string

参见 Filename.basename。此函数符合 POSIX.1-2008 对 dirname 实用程序的规范。

val null : string

null 在 POSIX 上为 "/dev/null",在 Windows 上为 "NUL"。它表示操作系统上的一个文件,该文件会丢弃所有写入操作并在读取时返回文件结束符。

val temp_file : ?temp_dir:string -> string -> string -> string

temp_file prefix suffix 返回临时目录中一个新临时文件的名称。临时文件的基名称由连接 prefix、然后是一个适当选择的整数、然后是 suffix 组成。可选参数 temp_dir 指示要使用的临时目录,默认为 Filename.get_temp_dir_name 的当前结果。临时文件为空创建,权限为 0o600(仅文件所有者可读写)。该文件保证与调用 temp_file 时存在的任何其他文件不同。

val open_temp_file : ?mode:open_flag list ->
?perms:int ->
?temp_dir:string -> string -> string -> string * out_channel

Filename.temp_file 相同,但同时返回一个新临时文件的名称和在该文件上(原子地)打开的输出通道。此函数比 temp_file 更安全:在程序打开它之前,临时文件不会被修改(例如被符号链接替换)的风险。可选参数 mode 是一个控制文件打开的附加标志列表。它可以包含一个或多个 Open_appendOpen_binaryOpen_text。默认值为 [Open_text](以文本模式打开)。文件以权限 perms 创建(默认为仅文件所有者可读写,0o600)。

val temp_dir : ?temp_dir:string -> ?perms:int -> string -> string -> string

temp_dir prefix suffixtemp_dir 中创建并返回一个新临时目录的名称,权限为 perms(默认为 0o700)。临时目录的基名称由连接 prefix、然后是一个适当选择的整数、然后是 suffix 组成。可选参数 temp_dir 指示要使用的临时目录,默认为 Filename.get_temp_dir_name 的当前结果。临时目录为空创建,权限为 0o700(仅文件所有者可读写和搜索)。该目录保证与调用 temp_dir 时存在的任何其他目录不同。

如果 temp_dir 不存在,则此函数不会创建它。相反,它会引发 Sys_error。

val get_temp_dir_name : unit -> string

临时目录的名称:在 Unix 下,TMPDIR 环境变量的值,或者如果变量未设置,则为 "/tmp"。在 Windows 下,TEMP 环境变量的值,或者如果变量未设置,则为 "."。可以使用 Filename.set_temp_dir_name 更改临时目录。

val set_temp_dir_name : string -> unit

更改 Filename.get_temp_dir_name 返回的临时目录,以及 Filename.temp_fileFilename.open_temp_file 使用的临时目录。临时目录是一个域本地值,它由子域继承。

val quote : string -> string

返回文件名的引号版本,适合用作命令行中的一个参数,对所有元字符进行转义。警告:在 Windows 下,输出仅适合用于遵循标准 Windows 引号约定的程序。

val quote_command : string ->
?stdin:string -> ?stdout:string -> ?stderr:string -> string list -> string

quote_command cmd args 返回一个引号命令行,适合用作 Sys.commandUnix.systemUnix.open_process 函数的参数。

字符串 cmd 是要调用的命令。列表 args 是传递给该命令的参数列表。它可以为空。

可选参数 ?stdin?stdout?stderr 是用于重定向标准输入、标准输出或命令的标准错误的文件名。如果给出 ~stdin:f,则执行重定向 < f,并且命令的标准输入从文件 f 读取。如果给出 ~stdout:f,则执行重定向 > f,并且命令的标准输出写入文件 f。如果给出 ~stderr:f,则执行重定向 2> f,并且命令的标准错误写入文件 f。如果同时给出 ~stdout:f~stderr:f,并且具有完全相同的文件名 f,则执行 2>&1 重定向,以便命令的标准输出和标准错误交错并重定向到相同的文件 f

在 Unix 和 Cygwin 下,命令、参数以及任何重定向都使用 Filename.quote 进行引号,然后连接在一起。在 Win32 下,将执行 Sys.command 调用的 cmd.exe shell 所要求的额外引号。