模組 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 的要求執行其他引號。