我尝试使用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删除非空目录的惯用方式是什么?
答案 0 :(得分:1)
您必须先使用Sys.remove
和Sys.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]