gpt4 book ai didi

erlang - 如何删除整个非空目录?

转载 作者:行者123 更新时间:2023-12-01 12:34:52 25 4
gpt4 key购买 nike

我想清理临时收集资源。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.

最佳答案

您可以使用 os:cmd 通过控制台命令删除目录,尽管这是一种粗略的方法。对于类 unix 的操作系统,它将是:

os:cmd("rm -Rf " ++ DirPath).

如果要使用适当的 erlang 函数删除非空目录,则必须递归执行。以下示例来自 here展示了如何做到这一点:
-module(directory).
-export([del_dir/1]).

del_dir(Dir) ->
lists:foreach(fun(D) ->
ok = file:del_dir(D)
end, del_all_files([Dir], [])).

del_all_files([], EmptyDirs) ->
EmptyDirs;
del_all_files([Dir | T], EmptyDirs) ->
{ok, FilesInDir} = file:list_dir(Dir),
{Files, Dirs} = lists:foldl(fun(F, {Fs, Ds}) ->
Path = Dir ++ "/" ++ F,
case filelib:is_dir(Path) of
true ->
{Fs, [Path | Ds]};
false ->
{[Path | Fs], Ds}
end
end, {[],[]}, FilesInDir),
lists:foreach(fun(F) ->
ok = file:delete(F)
end, Files),
del_all_files(T ++ Dirs, [Dir | EmptyDirs]).

关于erlang - 如何删除整个非空目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com