module Out_channel: Out_channel
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
關閉指定的通道,清空所有緩衝的寫入操作。當將輸出函數應用於已關閉的輸出通道時,它們會引發 Sys_error
異常,但 Out_channel.close
和 Out_channel.flush
除外,它們在應用於已關閉的通道時不會執行任何操作。請注意,如果作業系統在清空或關閉時發出錯誤信號,則 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))