Extensions to Core.Core_filename.
val normalize : string -> string
normalize path Removes as much "." and ".." from the path as possible. If the path is absolute they will all be removed.
val parent : string -> string
parent path The parent of the root directory is the root directory Returns the path to the parent of path.
val make_relative : ?to_:string -> string -> string
make_relative ~to_:src f returns f relative to src. Raises Failure if is_relative f <> is_relative src
val make_absolute : string -> string
make_absolute src Turn src into an absolute path expanded from the current working directory.
val expand : ?from:string -> string -> string
expand Makes a path absolute and expands ~ ~username to home directories. In case of error (e.g.: path home of a none existing user) raises Failure with a (hopefully) helpful message.
val explode : string -> string list
Splits a given path into a list of strings.
val implode : string list -> string
dual to explode
val normalize_path : string list -> string list
val compare : string -> string -> int
Filename.compare is a comparison that normalizes filenames ("./a" = "a"), uses a more human ready algorithm based on String.collate ("rfc02.txt > rfc1.txt") and extenstions ("a.c" > "a.h").

It is a total comparison on normalized filenames.

val with_open_temp_file : ?in_dir:string ->
?write:(out_channel -> unit) -> f:(string -> 'a) -> string -> string -> 'a
with_open_temp_file ~write ~f prefix suffix create a temporary file; runs write on its out_channel and then f on the resulting file. The file is removed once f is done running.
val with_temp_dir : ?in_dir:string -> string -> string -> f:(string -> 'a) -> 'a
Runs f with a temporary dir as option and removes the directory afterwards.
val is_parent : string -> string -> bool
is_parent dir1 dir2 returns true if dir1 is a parent of dir2

Note: This function is context independent, use expand if you want to consider relatives paths from a given point.

In particular:

  • A directory is always the parent of itself.
  • The root is the parent of any directory
  • An absolute path is never the parent of relative one and vice versa.
  • "../../a" is never the parent of "." even if this could be true given form the current working directory.