我想清理收集资源的临时文件。file
模块只有del_dir/1,它要求目录为空。但没有函数可以获取目录中的所有文件(绝对路径为”“)
源代码如下,如何改正?
delete_path(X)->
{ok,List} = file:list_dir_all(X), %% <--- return value has no absolute path here
lager:debug("_229:~n\t~p",[List]),
lists:map(fun(X)->
lager:debug("_231:~n\t~p",[X]),
ok = file:delete(X)
end,List),
ok = file:del_dir(X),
ok.
4条答案
按热度按时间jtoj6r0c1#
你可以使用os:cmd通过控制台命令删除一个目录,虽然这是一个粗略的方法。对于类Unix操作系统,它将是:
如果你想用适当的Erlang函数删除一个非空目录,你必须递归地执行。下面的例子来自here,展示了如何执行:
7gs2gvoe2#
现在,使用
file:del_dir/2
API的最新版Erlang/OTP(尚未发布)可以实现这一点。可用选项:
*递归:在删除目录本身之前递归删除目录的内容
*force:访问或删除文件或目录时忽略错误
*保持顶部:不删除最顶层的目录
来源:https://github.com/erlang/otp/pull/2565
u59ebvdq3#
Erlang中的不同方法(使用的唯一真实的原因是为了保持平台独立性):
上面的示例对当前目录与目标目录的关系做了一些假设--如果这对您的使用来说是个问题,建议显式设置一个工作目录并完全限定目标的路径。
值得注意的是,类似的方法也可用于递归地复制目录。
ih99xse14#
自Erlang OTP 23.0起,您可以使用file:del_dir_r/1函数。
对于仍在使用旧Erlang版本的用户,这里有一个基于新的官方del_dir_r源代码的替换版本,该版本已修复,可用于旧版本: