我有以下代碼:遞歸目錄只進了檔深
find_info(File) ->
case file:read_file_info(File) of
{ok, Facts} ->
case Facts#file_info.type of
directory -> directory;
regular -> regular
end;
{error,Reason} -> exit(Reason)
end.
find_files(Dir,Flag,Ending,Acc) ->
case file:list_dir(Dir) of
{ok,A} -> find_files_helper(A,Dir,Flag,Acc,Ending);
{_,_} -> Acc
end.
find_files_helper([H|Tail],Dir,Flag,Acc,Ending) ->
A = find_info(filename:absname_join(Dir,H)),
case A of
directory ->
case Flag of
true ->
find_files(filename:absname_join(Dir,H),Flag,Ending,AcC++ find_files_helper(Tail,Dir,Flag,Acc,Ending));
false -> find_files_helper(Tail,Dir,Flag,Acc,Ending)
end;
regular ->
case filename:extension(H) of
Ending -> find_files_helper(Tail,Dir,Flag,[to_md5_large(H)] ++ Acc, Ending);
_ -> find_files_helper(Tail,Dir,Flag,Acc,Ending)
end;
{error,Reason} -> exit(Reason)
end;
find_files_helper([],_,_,Acc,_) -> Acc.
但是每當我運行尋找文件/ 4的程序只進了檔深崩潰之前。 說我有以下目錄
home/
a/
ser.erl
b/
c/
file.erl
file2.erl
運行的時候我會得到的file2.erl
file.erl
的ser.erl
和MD5。但是,如果目錄看起來像這樣:
home/
a/
ser.erl
back.erl
b/
c/
file.erl
file2.erl
然後整個程序崩潰。我花了好幾個小時在我的邏輯中尋找我在這裏想念的東西,但我不知道。
我得到的錯誤消息是函數p:to_md5_large/1中的異常內容。
如果這裏需要的MD5是:
to_md5_large(File) ->
case file:read_file(File) of
{ok, <<B/binary>>} -> md5_helper(B,erlang:md5_init());
{error,Reason} -> exit(Reason)
end.
md5_helper(<<A:4/binary,B>>,Acc) -> md5_helper(B,erlang:md5_update(Acc,A));
md5_helper(A,Acc) ->
B = erlang:md5_update(Acc,A),
erlang:md5_final(B).
當你不在'back.erl'所在的目錄中時,你正在獲得'enoent',因爲你將'back.erl'這樣的文件名傳遞給'to_md5_large'。嘗試傳遞完整的文件名。 – 2015-03-30 20:39:42
@SteveVinoski想把它作爲答案? – Bula 2015-03-30 20:53:14