目录不存在时创建

问题描述 投票:0回答:2

如果新目录尚不存在,我想创建一个。 尝试了几件事,遗憾的是我没有在

Sys
图书馆中找到任何东西。

我得到的最接近的解决方案是:

if not (Sys.is_directory "vegetables") then Sys.mkdir "vegetabels"

这显然不起作用,因为抛出了异常。谢谢!

ocaml mkdir sys
2个回答
7
投票

你错过了

Sys.file_exists
(在类unix系统中目录被认为是文件):

let create_newdir path perm =
  if not (Sys.file_exists path) then Sys.mkdir path perm

2
投票

您可以使用

file_exists
进行检查,这是最好的方法,但了解如何处理异常也很有帮助。

请注意

mkdir
需要权限值。为了获得完全权限,我将使用
0o777
,但实际上这可能是一个坏主意。

let full_permission = 0o777 in
try 
  if not (Sys.is_directory "vegetables") then 
    Sys.mkdir "vegetabels" full_permission
with Sys_error _ ->
  Sys.mkdir "vegetabels" full_permission

或者,如果目录或文件已经存在,

Sys.mkdir
会引发异常,因此我们可以尝试创建目录,然后不执行任何操作来处理该异常。

let full_permission = 0o777 in
try
  Sys.mkdir "vegetabels" full_permission
with Sys_error _ -> ()

注意:当您使用异常处理时,这并不是忘记类型检查的借口。

try
的主体类型需要与任何
with
子句具有相同的类型。由于
Sys.mkdir
如果成功则返回
unit
,因此异常处理子句需要执行相同的操作。

© www.soinside.com 2019 - 2024. All rights reserved.