在Lua中给定一个独立于平台的文件名,如何获取目录路径

在Lua中给定一个独立于平台的文件名,如何获取目录路径,lua,Lua,如果文件是/etc/haproxy/haproxy.cfg,则输出应该是目录名/etc/haproxy 目前我正在使用 file = "/etc/haproxy/haproxy.cfg" sep = "/" file:match("(.*"..sep..")") 但它不是独立于平台的,在Windows上会失败,因为路径分隔符是不同的。那么,使用lfs模块是否有一种平台无关的方法来实现这一点呢?我不确定您是想解析路径还是以平台无关的方式使用路径,但要解析,您可以使用[\\/]模式而不是/,这将匹

如果文件是
/etc/haproxy/haproxy.cfg
,则输出应该是目录名
/etc/haproxy

目前我正在使用

file = "/etc/haproxy/haproxy.cfg"
sep = "/"
file:match("(.*"..sep..")")

但它不是独立于平台的,在Windows上会失败,因为路径分隔符是不同的。那么,使用lfs模块是否有一种平台无关的方法来实现这一点呢?

我不确定您是想解析路径还是以平台无关的方式使用路径,但要解析,您可以使用
[\\/]
模式而不是
/
,这将匹配不同类型的路径分隔符:

print(file:match("(.*[\\/])"))

如果您想使用这些路径打开/访问文件,那么使用
/
作为路径分隔符将与Windows上的LuaAPI一起使用。

package.config:sub(1,1)
为您提供运行Lua的平台的路径分隔符。请参阅。

这两个分隔符在Windows上都有效。示例:
file=io.open'C:/Python27/README.txt'
os.execute''C:/Program Files/internetexplorer/iexplore.exe'
。但是
package.config:sub(1,1)
只给出反斜杠。@EgorSkriptunoff re:
WIndows上的两个分隔符
我想你的意思是显示:
file=io.open'C:/Python27/README.txt'
os.execute''C:\Program Files\internetexplorer\iexplore.exe““
。反斜杠不应位于Linux的模式内:
本地模式,用于分隔符=“[/”.package.config:sub(1,1)…””