Tue, 17 Mar 2009 21:39:41 +0200
Basic directory scanner
1 | 1 | require('lfs') |
2 | ||
3 | local function filtered_dir(d) | |
4 | local f, s_, v_ = lfs.dir(d) | |
5 | local function g(s, v) | |
6 | while true do | |
7 | local vn=f(s, v) | |
8 | if vn~='.' and vn~='..' then | |
9 | return vn | |
10 | end | |
11 | end | |
12 | end | |
13 | return g, s_, v_ | |
14 | end | |
15 | ||
16 | ||
17 | function scan(d) | |
18 | local h={} | |
19 | for f in filtered_dir(d) do | |
20 | local n=d..'/'..f | |
21 | local a=lfs.attributes(n) | |
22 | if a.mode=='directory' then | |
23 | local nh=scan(n) | |
24 | h[n]=nh | |
25 | elseif a.mode=='file' then | |
26 | h[n]=true | |
27 | end | |
28 | end | |
29 | return h | |
30 | end | |
31 | ||
32 | function hfold(h, a, f, g) | |
33 | for n, c in pairs(h) do | |
34 | if type(c)=='table' then | |
35 | hfold(c, f(a, n), f, g) | |
36 | else | |
37 | g(a, n) | |
38 | end | |
39 | end | |
40 | end |