> Erlang中文手册 > ensure_dir/1 确定文件或目录的所有父目录都已经存在

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/").