module Out_channel:sig
..end
typet =
out_channel
輸出通道的類型。
typeopen_flag =
open_flag
=
| |
Open_rdonly |
(* | 開啟以供讀取。 | *) |
| |
Open_wronly |
(* | 開啟以供寫入。 | *) |
| |
Open_append |
(* | 開啟以供附加:永遠寫在檔案末端。 | *) |
| |
Open_creat |
(* | 如果檔案不存在則建立檔案。 | *) |
| |
Open_trunc |
(* | 如果檔案已存在則清空檔案。 | *) |
| |
Open_excl |
(* | 如果使用 Open_creat 且檔案已存在,則會失敗。 | *) |
| |
Open_binary |
(* | 以二進制模式開啟(不轉換)。 | *) |
| |
Open_text |
(* | 以文字模式開啟(可能會執行轉換)。 | *) |
| |
Open_nonblock |
(* | 以非阻塞模式開啟。 | *) |
Out_channel.open_gen
的開啟模式。
val stdout : t
程序的標準輸出。
val stderr : t
程序的標準錯誤輸出。
val open_bin : string -> t
開啟指定的檔案以供寫入,並傳回該檔案的新輸出通道,定位於檔案開頭。如果檔案已存在,則會截斷為零長度。如果檔案不存在,則會建立檔案。
val open_text : string -> t
與 Out_channel.open_bin
相同,但是檔案是以文字模式開啟,因此在寫入期間會進行換行轉換。在不區分文字模式和二進制模式的作業系統上,此函式的行為與 Out_channel.open_bin
相同。
val open_gen : open_flag list -> int -> string -> t
open_gen mode perm filename
開啟指定的檔案以供寫入,如上所述。額外的引數 mode
指定開啟模式。額外的引數 perm
指定檔案權限,以防必須建立檔案。Out_channel.open_text
和 Out_channel.open_bin
是此函式的特例。
val with_open_bin : string -> (t -> 'a) -> 'a
with_open_bin fn f
在檔案 fn
上開啟一個通道 oc
,並傳回 f
。在
ocf
傳回值或引發例外狀況之後,保證會關閉 oc
。
val with_open_text : string -> (t -> 'a) -> 'a
與 Out_channel.with_open_bin
相似,但是通道是以文字模式開啟 (請參閱 Out_channel.open_text
)。
val with_open_gen : open_flag list -> int -> string -> (t -> 'a) -> 'a
與 Out_channel.with_open_bin
相似,但是可以指定開啟模式和檔案權限,以防必須建立檔案 (請參閱 Out_channel.open_gen
)。
val close : t -> unit
關閉指定的通道,並刷新所有緩衝的寫入操作。除了 Out_channel.close
和 Out_channel.flush
之外,輸出函式在套用至已關閉的輸出通道時會引發 Sys_error
例外狀況,這兩個函式在套用至已關閉的通道時不會執行任何動作。請注意,如果作業系統在刷新或關閉時發出錯誤訊號,Out_channel.close
可能會引發 Sys_error
。
val close_noerr : t -> unit
與 Out_channel.close
相同,但是忽略所有錯誤。
val output_char : t -> char -> unit
將字元寫入指定的輸出通道。
val output_byte : t -> int -> unit
將一個 8 位元整數 (作為具有該程式碼的單一字元) 寫入指定的輸出通道。指定的整數會模 256。
val output_string : t -> string -> unit
將字串寫入指定的輸出通道。
val output_bytes : t -> bytes -> unit
將位元組序列寫入指定的輸出通道。
val output : t -> bytes -> int -> int -> unit
output oc buf pos len
從位元組序列 buf
的偏移量 pos
開始,將 len
個字元寫入指定的輸出通道 oc
。
pos
和 len
沒有指定 buf
的有效範圍,則引發 Invalid_argument
。val output_substring : t -> string -> int -> int -> unit
與 Out_channel.output
相同,但是會採用字串作為引數,而不是位元組序列。
val output_bigarray : t ->
('a, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
Bigarray.Array1.t -> int -> int -> unit
與 Out_channel.output
相同,但是會從大型陣列取得資料。
val flush : t -> unit
刷新與指定輸出通道相關聯的緩衝區,對該通道執行所有擱置的寫入操作。互動式程式必須小心在正確的時間刷新標準輸出和標準錯誤。
val flush_all : unit -> unit
刷新所有開啟的輸出通道;忽略錯誤。
val seek : t -> int64 -> unit
seek chan pos
將通道 chan
的目前寫入位置設定為 pos
。這僅適用於常規檔案。對於其他種類的檔案 (例如終端機、管道和通訊端),行為未指定。
val pos : t -> int64
傳回指定通道的目前寫入位置。不適用於使用 Open_append
旗標開啟的通道 (會傳回未指定的結果)。
對於在 Windows 下以文字模式開啟的檔案,傳回的位置是近似值 (由於行尾轉換);特別是,使用 Out_channel.pos
儲存目前位置,然後使用 Out_channel.seek
回到此位置將無法運作。為了使這種程式設計慣用語能夠可靠且可攜地運作,檔案必須以二進制模式開啟。
val length : t -> int64
傳回指定通道開啟的常規檔案的大小 (字元數)。如果通道開啟的檔案不是常規檔案,則結果沒有意義。
val set_binary_mode : t -> bool -> unit
set_binary_mode oc true
將通道 oc
設定為二進制模式:輸出期間不會進行任何轉換。
set_binary_mode oc false
將通道 oc
設定為文字模式:根據作業系統,輸出期間可能會進行一些轉換。例如,在 Windows 下,行尾會從 \n
轉換為 \r\n
。
此函式在不區分文字模式和二進制模式的作業系統下無效。
val is_binary_mode : t -> bool
is_binary_mode oc
傳回通道 oc
是否處於二進制模式 (請參閱 Out_channel.set_binary_mode
)。
val set_buffered : t -> bool -> unit
set_buffered oc true
將通道 oc
設定為緩衝模式。在此模式下,在 oc
上輸出的資料會被緩衝,直到內部緩衝區已滿或呼叫函式 Out_channel.flush
或 Out_channel.flush_all
,然後才會傳送到輸出裝置。
set_buffered oc false
將通道 oc
設定為非緩衝模式。在此模式下,在 oc
上輸出的資料會立即傳送到輸出裝置。
所有通道預設都是以緩衝模式開啟。
val is_buffered : t -> bool
is_buffered oc
傳回通道 oc
是否已緩衝 (請參閱 Out_channel.set_buffered
)。
val isatty : t -> bool
如果 oc
參照終端機或主控台視窗,則 isatty oc
為 true
,否則為 false
。
寫入檔案內容
let write_file file s =
Out_channel.with_open_bin file
(fun oc -> Out_channel.output_string oc s))