模組 Stdlib.Filename

module Filename: Filename

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 suffix 會在 temp_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 所需的額外引號。