我正在尝试确定lua脚本中是否存在多个目录中的一个。它可以在OSX上运行,但不适用于Windows(Linux目前尚未经过测试,但我希望它可以运行)。运行以下代码时,出现错误:
失败了这个C:\ Program Files(x86)\ VideoLAN \ VLC \ lua \ playlist \:没有这样的文件或目录
我可以确认该目录存在。我已经逃脱了斜线,我不确定还有什么问题。
local oses = { "/Applications/VLC.app/Contents/MacOS/share/lua/playlist/"; "C:\\Program Files\\VideoLAN\\VLC\\lua\\playlist\\"; "C:\\Program Files (x86)\\VideoLAN\\VLC\\lua\\playlist\\"; "/usr/lib/vlc/lua/playlist" }
-- Determine which OS this is (and where to find share/lua).
local f,err = io.open( oses[1], "r")
if not err then
opsys = "OSX"
scriptpath = oses[1] .. script
f:close()
else
f,err = io.open( oses[2], "r")
if not err then
opsys = "Win32"
scriptpath = oses[2] .. script
f:close()
else
f,err = io.open( oses[3], "r")
vlc.msg.dbg( dhead .. 'failed with this ' .. err .. dtail )
if not err then
opsys = "Win64"
scriptpath = oses[3] .. script
f:close()
else
f,err = io.open( oses[4], "r")
if not err then
opsys = "Linux/Unix"
scriptpath = oses[4] .. script
f:close()
else
return false
end
end
end
end
答案 0 :(得分:3)
文件“C:\ Program Files \ VideoLAN \ VLC \ lua \ playlist \”不存在。如果您要删除尾部斜杠,您将尝试打开一个目录,并可能获得权限错误。它无论如何都无法发挥作用。如果您打算使用这种确定操作系统的方法,您应该尝试打开文件。
例如,构建脚本路径,尝试打开该文件,然后使用 来确定通过/失败。
旁注,代码的结构可以大大改进。每当你有一堆由索引不同的重复代码时,你应该使用循环。例如,我们可以用以下代码替换您的代码:
local oses = {
["OSX"] = "/Applications/VLC.app/Contents/MacOS/share/lua/playlist/",
["Win32"] = "C:\\Program Files\\VideoLAN\\VLC\\lua\\playlist\\",
["Win64"] = "C:\\Program Files (x86)\\VideoLAN\\VLC\\lua\\playlist\\",
["Linux/Unix"] = "/usr/lib/vlc/lua/playlist",
}
for osname, directory in pairs(oses) do
local scriptpath = directory..script
local f,err = io.open( scriptpath, "r")
if not err then
f:close()
return scriptpath, osname
end
end