使用Lua,检查文件是否是目录

时间:2010-05-14 11:16:35

标签: lua

如果我有这段代码

local f = io.open("../web/", "r")
print(io.type(f))

-- output: file

如何知道f是否指向某个目录?

7 个答案:

答案 0 :(得分:9)

ANSI C没有指定任何获取目录信息的方法,因此vanilla Lua无法告诉您该信息(因为Lua努力实现100%的可移植性)。但是,您可以使用外部库(例如LuaFileSystem)来标识目录。

Progamming in Lua甚至明确说明缺少目录功能:

  

作为一个更复杂的例子,让我们编写一个返回给定目录内容的函数。 Lua不在其标准库中提供此功能,因为ANSI C没有此作业的功能。

该示例继续向您展示如何在C中编写dir函数。

答案 1 :(得分:6)

我在我使用的库中找到了这段代码:

function is_dir(path)
    local f = io.open(path, "r")
    local ok, err, code = f:read(1)
    f:close()
    return code == 21
end

我不知道Windows中的代码是什么,但在Linux / BSD / OSX上它运行正常。

答案 2 :(得分:5)

Lua的默认库无法确定这一点。

但是,您可以使用第三方LuaFileSystem库来访问更高级的文件系统交互;它也是跨平台的。

答案 3 :(得分:5)

如果你这样做

local x,err=f:read(1)

然后你会在"Is a directory"中获得err

答案 4 :(得分:2)

至少对于UNIX:

if os.execute("cd '" .. f .. "'")
then print("Is a dir")
else print("Not a dir")
end

:)

答案 5 :(得分:0)

function fs.isDir ( file )
if file == nil then return true end
if fs.exists(file) then
    os.execute("dir \""..userPath..file.."\" >> "..userPath.."\\Temp\\$temp")
    file = io.open(userPath.."\\Temp\\$temp","r")
    result = false
    for line in file:lines() do
        if string.find(line, "<DIR>") ~= nil then
            result = true
            break
        end
    end
    file:close()
    fs.delete("\\Temp\\$temp")
    if not (result == true or result == false) then
        return "Error"
    else
        return result
    end
else
    return false
end
end

这是我从之前找到的库中提取的一些代码。

答案 6 :(得分:0)

首先检查是否可以读取路径(对于空文件也是nil),然后再检查大小是否为0。

function is_dir(path)
    f = io.open(path)
    return not f:read(0) and f:seek("end") ~= 0
end