Simple utilities to deal with basic Input/Output tasks in a resource-safe way. For advanced IO tasks, the user is advised to use something like Lwt or Async, that are far more comprehensive.
Examples:
# let l = CCIO.(with_in "/tmp/some_file" read_lines);;
# CCIO.(
with_in "/tmp/input"
(fun ic ->
let chunks = read_chunks ic in
with_out ~flags:[Open_binary] ~mode:0o644 "/tmp/output"
(fun oc ->
write_gen oc chunks
)
)
) ;;
val with_in : ?mode:int ‑> ?flags:Pervasives.open_flag list ‑> string ‑> (Pervasives.in_channel ‑> 'a) ‑> 'a
Open an input file with the given optional flag list, calls the function on the input channel. When the function raises or returns, the channel is closed.
[Open_text]
). Open_rdonly
is used in any cases.val read_chunks : ?size:int ‑> Pervasives.in_channel ‑> string gen
Read the channel's content into chunks of size size
.
val read_line : Pervasives.in_channel ‑> string option
Read a line from the channel. Returns None
if the input is terminated.
The "\n" is removed from the line.
val read_lines : Pervasives.in_channel ‑> string gen
Read all lines. The generator should be traversed only once.
val read_all : ?size:int ‑> Pervasives.in_channel ‑> string
Read the whole channel into a buffer, then converted into a string.
val read_all_bytes : ?size:int ‑> Pervasives.in_channel ‑> Bytes.t
Read the whole channel into a mutable byte array.
val with_out : ?mode:int ‑> ?flags:Pervasives.open_flag list ‑> string ‑> (Pervasives.out_channel ‑> 'a) ‑> 'a
Like with_in but for an output channel.
[Open_creat; Open_trunc; Open_text]
).Open_wronly
is used in any cases.val with_out_a : ?mode:int ‑> ?flags:Pervasives.open_flag list ‑> string ‑> (Pervasives.out_channel ‑> 'a) ‑> 'a
Like with_out but with the [Open_append; Open_creat; Open_wronly]
flags activated, to append to the file.
val write_line : Pervasives.out_channel ‑> string ‑> unit
Write the given string on the channel, followed by "\n".
val write_gen : ?sep:string ‑> Pervasives.out_channel ‑> string gen ‑> unit
Write the given strings on the output. If provided, add sep
between
every two strings (but not at the end).
val write_lines : Pervasives.out_channel ‑> string gen ‑> unit
Write every string on the output, followed by "\n".
val with_in_out : ?mode:int ‑> ?flags:Pervasives.open_flag list ‑> string ‑> (Pervasives.in_channel ‑> Pervasives.out_channel ‑> 'a) ‑> 'a
tee funs gen
behaves like gen
, but each element is given to
every function f
in funs
at the time the element is produced.
How to list recursively files in a directory:
# let files = CCIO.File.read_dir ~recurse:true (CCIO.File.make "/tmp");;
# CCIO.write_lines stdout files;;
See File.walk if you also need to list directories:
# let content = CCIO.File.walk (CCIO.File.make "/tmp");;
# Gen.map CCIO.File.show_walk_item content |> CCIO.write_lines stdout;;
module File : sig ... end