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