如果我有这段代码
local f = io.open("../web/", "r")
print(io.type(f))
-- output: file
如何知道f
是否指向某个目录?
答案 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