如何使用OCaml删除非空目录?

时间:2019-05-27 14:23:41

标签: ocaml

我尝试使用Sys.remove "mydir"删除目录,但这会导致异常:Exception: Sys_error u"mydir: Is a directory".

接下来,我查看了Unix.rmdir "mydir",但是由于目录不为空(导致Exception: Unix.Unix_error (27, "rmdir", "mydir"),该操作不起作用。

因此,我想删除非空目录的唯一方法是使用Sys.readdir "mydir"获取目录中的文件列表,然后递归删除其内容,最后使用Unix.rmdir删除空目录

使用OCaml删除非空目录的惯用方式是什么?

1 个答案:

答案 0 :(得分:1)

您必须先使用Sys.removeSys.readdir递归删除其内容,然后,在目录为空时,例如,删除目录本身,

let rec rmrf path = match Sys.is_directory path with
  | true ->
    Sys.readdir path |>
    Array.iter (fun name -> rmrf (Filename.concat path name));
    Unix.rmdir path
  | false -> Sys.remove path

或者,您可以使用OCaml Fileutils库,该库提供与POSIX兼容的文件实用程序,即rm函数,该函数可以递归(且可移植)删除整个目录,例如

 FileUtil.rm ~recurse:true [dir]