filelib:ensure_dir/1
确定文件或目录的所有父目录都已经存在
用法:
ensure_dir(Name) -> ok | {error, Reason}
内部实现:
%%----------------------------------------------------------------------
%% +type ensure_dir(X) -> ok | {error, Reason}.
%% +type X = filename() | dirname()
%% ensures that the directory name required to create D exists
-spec ensure_dir(Name) -> 'ok' | {'error', Reason} when
Name :: filename() | dirname(),
Reason :: file:posix().
ensure_dir("/") ->
ok;
ensure_dir(F) ->
Dir = filename:dirname(F),
case do_is_dir(Dir, file) of
true ->
ok;
false when Dir =:= F ->
%% Protect against infinite loop
{error,einval};
false ->
ensure_dir(Dir),
case file:make_dir(Dir) of
{error,eexist}=EExist ->
case do_is_dir(Dir, file) of
true ->
ok;
false ->
EExist
end;
Err ->
Err
end
end.
判定确保对给出的文件名或文件夹名 Name 的上层所有父目录是否存在。如果有必要, 该函数会尝试创建缺失的父目录路径。当所有的父目录都存在或者可以被创建时,则返回 ok;如果部分父目录不存在并且创建不成功时,则返回 {error, Reason}。
filelib:ensure_dir("./test_dir/").