Lua返回路径中的目录路径

我有一个字符串变量,表示一些文件的完整路径,例如:

x = "/home/user/.local/share/app/some_file" 在 Linux 上

x = "C:\\Program Files\\app\\some_file" 在 Windows 上

我想知道是否有一种编程方法比手动拆分字符串更好,以获取目录路径。

如何在Lua中返回目录路径(不包含文件名),而不加载额外的库,比如LFS,因为我正在使用其他应用程序的Lua扩展?

原文链接 https://stackoverflow.com/questions/9102126

点赞
stackoverflow用户513763
stackoverflow用户513763

在普通的 Lua 中,并没有更好的方法。Lua 中没有可以处理路径的函数。你必须使用模式匹配。这是提供了大量工具,但拒绝包括那些可以用一行代码替换的功能的心态:

-- onelined version ;)
--    getPath=function(str,sep)sep=sep or'/'return str:match("(.*"..sep..")")end
getPath=function(str,sep)
    sep=sep or'/'
    return str:match("(.*"..sep..")")
end

x = "/home/user/.local/share/app/some_file"
y = "C:\\Program Files\\app\\some_file"
print(getPath(x))
print(getPath(y,"\\"))
2012-02-01 19:52:31
stackoverflow用户1561036
stackoverflow用户1561036

以下是基于 jpjacobs 的解决方案的跨平台更简单的解决方案:

function getPath(str)
    return str:match("(.*[/\\])")
end

x = "/home/user/.local/share/app/some_file"
y = "C:\\Program Files\\app\\some_file"
print(getPath(x)) -- 打印出:/home/user/.local/share/app/
print(getPath(y)) -- 打印出:C:\Program Files\app\
2017-04-06 15:49:22
stackoverflow用户204011
stackoverflow用户204011

针对这种情况,你可以编写自己的代码。但也有一些使用纯 Lua 编写的库实现了此功能,例如 lua-pathPenlight

2017-05-14 18:26:39