Как удалить непустую директорию с помощью OCaml? - PullRequest
0 голосов
/ 27 мая 2019

Я попытался удалить каталог, используя 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 Ответ

1 голос
/ 28 мая 2019

Сначала необходимо рекурсивно удалить его содержимое, используя 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...