北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 26990|回复: 12

【lua】怎么遍历目录?

[复制链接]
发表于 2011-12-21 18:34:10 | 显示全部楼层 |阅读模式
本帖最后由 knightmade 于 2011-12-27 06:36 PM 编辑

想遍历指定目录下的所有子目录,在lua中应该怎么做?

我知道os.execute("dir /ad/b");能实现,但这种方法不是纯lua解决的,而且还依赖于操作系统。感觉不太干净。有没有更好的办法?

北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-12-21 19:40:49 | 显示全部楼层
Lua 遍历目录处理
2008-10-09 14:54
--使用Lua遍历指定目录,获取所有文件,并使用自定义的函数处理每一个文件
--遍历目录,并对所有的文件进行处理
function get_dir_file(dirpath,func)
    --os.execute("dir " .. dirpath .. " /s > temp.txt")
    os.execute('dir "' .. dirpath .. '" /s > temp.txt')
    io.input("temp.txt")
    local dirname = ""
    local filename = ""
    for line in io.lines() do
        local a,b,c
        --匹配目录
        a,b,c=string.find(line,"^%s*(.+)%s+的目录")
        if a then
         dirname = c
         --print(c)
     end
     --匹配文件
        a,b,c=string.find(line,"^%d%d%d%d%-%d%d%-%d%d%s-%d%d:%d%d%s-[%d%,]+%s+(.+)%s-$")
        if a then
         filename = c
         --print(c)
         func(dirname .. "\\" .. filename)
        end
     --print(line)
    end
end
--获取指定的最后一个字符的位置
function get_last_word(all,word)
    local b = 0
    local last = nil
    while true do
        local s,e = string.find(all, word, b) -- find 'next' word
        if s == nil then
         break
        else
         last = s
        end
         b = s + string.len(word)
    end
    return last
end

--可以通过get_last_word获取指定文件的相应路径和相应文件名
filepath = "c:\\windows\\explorer.exe"
pos=get_last_word(filepath,"\\")
dirname=string.sub(filepath,1,pos)
filename=string.sub(filepath,pos+1,-1)
print(dirname,filename)
--使用print函数对C:\Program Files\Internet Explorer文件夹下文件进行处理
--get_dir_file('"C:\\Program Files\\Internet Explorer"',print)
get_dir_file('C:\\Program Files\\Internet Explorer',print)


我问度娘的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-12-21 19:42:48 | 显示全部楼层
好像,也是需要依赖操作系统吧

你说,不依赖操作系统,我觉得,不大可能呢

首先,文件系统,是建立在操作系统之上的
你想绕过操作系统,直接访问文件系统~~~
不是那么容易吧
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-12-21 23:04:06 | 显示全部楼层
我不是说不能依赖文件系统,是不依赖特定的文件系统。

像2楼那位老兄的东西,拿到linux下就跑不了。
而且,我都说了不想用os.execute(),他还贴出那么一大坨,真是受不了……
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-12-21 23:04:12 | 显示全部楼层
我不是说不能依赖文件系统,是不依赖特定的文件系统。

像2楼那位老兄的东西,拿到linux下就跑不了。
而且,我都说了不想用os.execute(),他还贴出那么一大坨,真是受不了……
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-12-21 23:49:37 | 显示全部楼层
我感觉人家好心贴出来帮助你,你用一大坨来形容,是不是有点太不客气了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-12-22 01:51:02 | 显示全部楼层
我不是说不能依赖文件系统,是不依赖特定的文件系统。

像2楼那位老兄的东西,拿到linux下就跑不了。
而 ...
knightmade 发表于 2011-12-21 11:04 PM



    win系统和linux系统的文件格式都是不一样的,最基本的是,磁盘格式都不一样
在两者都不一样的基础之上,你要求去遍历目录~~要用到的东西,都不是通用的!

一个NTFS,一个EX3……
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-12-22 07:42:01 | 显示全部楼层
楼主的意思是用lua实现,而不是调用os命令,是吧
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-12-27 17:58:29 | 显示全部楼层
楼主的意思是用lua实现,而不是调用os命令,是吧
labaz 发表于 2011-12-22 07:42 AM



是的,我就是这个意思。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-12-28 10:19:51 | 显示全部楼层
我很好奇 你为什么要做这个。。。。。
能解释下吗
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-28 01:18 AM , Processed in 0.021511 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表