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

Pet*_*Mmm 5 lua

如果我有这个代码

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

-- output: file
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*off 9

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

Lua中的Progamming甚至明确说明了缺少的目录功能:

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

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


Val*_*oni 6

我在我使用的库中发现了这段代码:

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

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


Amb*_*ber 5

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

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


lhf*_*lhf 5

如果你这样做

local x,err=f:read(1)
Run Code Online (Sandbox Code Playgroud)

然后你会进去"Is a directory"err.

  • 请注意,错误消息(如果它来自系统)可能是本地化的,因此依赖它可能不是一个好主意. (2认同)