[Erlang] Рекурсивный обход директорий
От: Mamut Швеция http://dmitriid.com
Дата: 23.01.06 14:50
Оценка:
Только не смейтесь над убогим

Надо было мне тут совершить обход директорий и вытащить список как директорий, так и файлов — с размерами файлов.

Значит, наваял я вот такое. На названия не обращайте внимания, тяжелое наследие первых родов ежей против шерсти

-module(mamut_parse_dir). -export([parse_dir/1]). %% Вызываем, собственно, вот эту самую функцию parse_dir(PathToDir) -> case filelib:is_dir(PathToDir) of false -> {error, not_a_dir}; true -> {Dir, parse_dirs(get_dirs(PathToDir)), get_files(PathToDir)}. end. parse_dirs([]) -> []; parse_dirs([H|T]) -> [H, get_files(H)] ++ [parse_dirs(T)]. %% Берем список поддиректорий, стырено здесь: http://schemecookbook.org/Erlang/FileWalkDirectoryTree get_dirs(Path) -> P = filename:join(Path, "*"), lists:filter( fun(X) -> filelib:is_dir(X) end, filelib:wildcard(P)). %% Берем список файлов, творчески обработанная функчия сверху %% Возвращаю кортеж {имя_файла, размер_файла} get_files(Path) -> P = filename:join(Path, "*"), lists:map(fun(X) -> {X, filelib:file_size(X)} end, lists:filter( fun(X) -> filelib:is_regular(X) end, filelib:wildcard(P))).



В общем мне понравилось Но вопрос — а можно еще кратчее и красивше
... << RSDN@Home 1.2.0 alpha rev. 619>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.