Catala_utils.File
Utility functions used for file manipulation.
val with_out_channel : t -> (Stdlib.out_channel -> 'a) -> 'a
Runs the given function with the provided file opened, ensuring it is properly closed afterwards. May raise just as open_out
.
val with_in_channel : t -> (Stdlib.in_channel -> 'a) -> 'a
Runs the given function with the provided file opened, ensuring it is properly closed afterwards. May raise just as open_in
.
with_formatter_of_out_channel oc f
creates an flushes the formatter used in f
from the given out_channel oc
.
val with_formatter_of_file : t -> (Stdlib.Format.formatter -> 'a) -> 'a
with_formatter_of_file filename f
manages the formatter created from the file filename
used in f
-- i.e. closes the corresponding out_channel and flushes the formatter.
val with_formatter_of_opt_file :
t option ->
(Stdlib.Format.formatter -> 'a) ->
'a
with_formatter_of_opt_file filename_opt f
manages the formatter created from the file filename_opt
if there is some (see with_formatter_of_file
), otherwise, uses the Format.std_formatter
.
val get_out_channel :
source_file:t Global.input_src ->
output_file:t option ->
?ext:string ->
unit ->
t option * ((Stdlib.out_channel -> 'a) -> 'a)
get_output ~source_file ~output_file ?ext ()
returns the inferred filename and its corresponding with_out_channel
function. If the output_file
is equal to Some "-"
returns a wrapper around stdout
.
val get_formatter_of_out_channel :
source_file:t Global.input_src ->
output_file:t option ->
?ext:string ->
unit ->
t option * ((Stdlib.Format.formatter -> 'a) -> 'a)
get_output_format ~source_file ~output_file ?ext ()
returns the inferred filename and its corresponding with_formatter_of_out_channel
function. If the output_file
is equal to Some "-"
returns a wrapper around stdout
.
val temp_file : string -> string -> t
Like Filename.temp_file
, but registers the file for deletion at program exit unless Cli.debug_flag is set.
val with_temp_file : string -> string -> ?contents:string -> (t -> 'a) -> 'a
Creates a temp file (with prefix and suffix like temp_file
, optionally with the given contents, for the lifetime of the supplied function, then remove it unconditionally
val contents : t -> string
Reads the contents of a file as a string
process_out cmd args
executes the given command with the specified arguments, and returns the stdout of the process as a string. check_exit
is called on the return code of the sub-process, the default is to fail on anything but 0.
File copy. Doesn't copy file attributes, only file content. The destination file is silently overwritten if it exists. Failures may leave a partial copy. dst
can not be a directory
val remove : t -> unit
Recursively removes files and directories. Dangerous!
Does not fail on already non-existent files
Checks if the given directory exists and returns it normalised (as per Unix.realpath
).
val ensure_dir : t -> unit
Creates the directory (and parents recursively) if it doesn't exist already. Errors out if the file exists but is not a directory
val exists : t -> bool
Alias for Sys.file_exists
Returns its argument if it exists and is a plain file, None
otherwise. Does not do resolution like check_directory
.
Resolves a command:
t
is a plain name, resolve in PATHt
is relative, returns its absolute patht
was not foundFilename.concat
: Sugar to allow writing File.("some" / "relative" / "path")
. As an exception, if the lhs is .
, returns the rhs unchanged.
Similar to dirname
, except it strips the last **non-"." or ".."** element in the supplied file name, if it exists
Rewrites a path by removing intermediate relative lookups ("." and ".."). E.g. ../foo/./bar/../baz/
becomes ../foo/baz
. No disk lookup is made by this function.
If to_dir
is a path to a given directory and f
a path to a file as seen from absolute path from_dir
, reverse_path ~from_dir ~to_dir f
is a path leading to f
from to_dir
. The results attempts to be relative to to_dir
.
Checks for the first directory matching the given predicate from cwd
upwards (defaults to the current directory). Recursion stops at home. Returns a pair dir, rel_path
, where dir
is the ancestor directory matching the predicate, and rel_path
is a path pointing to it from the current dir.
Extension replacement: chops the given filename extension, and replaces it with the given one (which shouldn't start with a dot). No dot is appended if the provided extension is empty.
val path_to_list : t -> string list
Empty elements or current-directory (".") are skipped in the resulting list
val format : Stdlib.Format.formatter -> t -> unit
Formats a filename in a consistent style, with double-quotes and color (when the output supports)
Recursively scans a directory for files. Directories or files matching ".*" or "_*" are ignored. Unreadable files or subdirectories are ignored with a debug message. If t
is a plain file, scan just that non-recursively.
The matching results are returned grouped by directory, case-insensitively ordered by filename, as a list of non-empty subdirs and a list of extracted items.
module Tree : sig ... end
A lazy tree structure mirroring the filesystem ; uses the comparison from File, so paths are case-insensitive.