diff --git a/src/io/CCIO.ml b/src/io/CCIO.ml index 1a6e5a1a..5f2916c8 100644 --- a/src/io/CCIO.ml +++ b/src/io/CCIO.ml @@ -194,6 +194,7 @@ let tee funs g () = match g() with *) module File = struct + type 'a or_error = [`Ok of 'a | `Error of string] type t = string let to_string f = f @@ -207,9 +208,14 @@ module File = struct let is_directory f = Sys.is_directory f - let remove f = Sys.remove f + let remove_exn f = Sys.remove f - let remove_safe f = try Sys.remove f with _ -> () + let remove f = + try `Ok (Sys.remove f) + with exn -> + `Error (Printexc.to_string exn) + + let remove_noerr f = try Sys.remove f with _ -> () let read_dir_base d = if Sys.is_directory d diff --git a/src/io/CCIO.mli b/src/io/CCIO.mli index b0a92432..945fb5ce 100644 --- a/src/io/CCIO.mli +++ b/src/io/CCIO.mli @@ -134,6 +134,7 @@ See {!File.walk} if you also need to list directories: *) module File : sig + type 'a or_error = [`Ok of 'a | `Error of string] type t = string (** A file is always represented by its absolute path *) @@ -146,8 +147,17 @@ module File : sig val is_directory : t -> bool - val remove : t -> unit - val remove_safe : t -> unit + val remove_exn : t -> unit + (** [remove_exn path] tries to remove the file at [path] from the + file system. + + {b Raises} [Sys_error] if there is no file at [path] *) + + val remove : t -> unit or_error + (** Like [remove_exn] but with an error monad. *) + + val remove_noerr : t -> unit + (** Like [remove_exn] but do not raise any exception on failure. *) val read_dir : ?recurse:bool -> t -> t gen (** [read_dir d] returns a sequence of files and directory contained