module CCIO:sig..end
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
)
)
) ;;
type'aor_error =('a, string) Result.result
type'agen =unit -> 'a option
Gen in the gen libraryval with_in : ?mode:int ->
?flags:Pervasives.open_flag list ->
string -> (Pervasives.in_channel -> 'a) -> 'aSys_error in case of error (same as open_in and close_in)flags : opening flags (default [Open_text]). Open_rdonly is used in any casesval read_chunks : ?size:int -> Pervasives.in_channel -> string gensizeval read_line : Pervasives.in_channel -> string optionNone if the input is terminated.
The "\n" is removed from the line.val read_lines : Pervasives.in_channel -> string genval read_lines_l : Pervasives.in_channel -> string listval read_all : ?size:int -> Pervasives.in_channel -> stringsize : the internal buffer sizeval read_all_bytes : ?size:int -> Pervasives.in_channel -> Bytes.tsize : the internal buffer sizeval with_out : ?mode:int ->
?flags:Pervasives.open_flag list ->
string -> (Pervasives.out_channel -> 'a) -> 'aCCIO.with_in but for an output channelSys_error in case of error (same as open_out and close_out)
Open_wronly is used in any casesflags : opening flags (default [Open_creat; Open_trunc; Open_text]).val with_out_a : ?mode:int ->
?flags:Pervasives.open_flag list ->
string -> (Pervasives.out_channel -> 'a) -> 'aCCIO.with_out but with the [Open_append; Open_creat; Open_wronly]
flags activated, to append to the file.Sys_error in case of error (same as open_out and close_out)val write_line : Pervasives.out_channel -> string -> unitval write_gen : ?sep:string -> Pervasives.out_channel -> string gen -> unitsep between
every two strings (but not at the end)val write_lines : Pervasives.out_channel -> string gen -> unitval write_lines_l : Pervasives.out_channel -> string list -> unitval with_in_out : ?mode:int ->
?flags:Pervasives.open_flag list ->
string -> (Pervasives.in_channel -> Pervasives.out_channel -> 'a) -> 'a
flags : opening flags (default [Open_creat])val tee : ('a -> unit) list -> 'a gen -> 'a gentee 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 CCIO.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