为什么这个lua脚本无法打开Windows子目录?

我试图确定一个目录是否在lua脚本中。 它适用于OSX,但不适用于Windows(linux目前尚未testing,但我期望一个工作)。 当下面的代码运行时,我得到一个错误:

失败与此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 

Solutions Collecting From Web of "为什么这个lua脚本无法打开Windows子目录?"

文件 “C:\ Program Files \ VideoLAN \ VLC \ lua \ playlist \”不存在。 如果您要删除最后一个斜杠,您将尝试打开一个目录,并可能获得权限错误。 这是不会工作的。 如果你打算使用这种确定OS的方法,你应该试图打开文件

例如,建立您的脚本路径,尝试打开该文件,并使用来确定通过/失败。

注意,你的代码的结构可以大大改善。 任何时候你有一堆重复的代码不同的索引,你应该使用循环。 例如,我们可以用这个代替你的代码:

 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