使用Lua/C++设置文件路径
2016-2-4 18:27:50
收藏:0
阅读:51
评论:1
我有存储在文件夹中的XML配置文件,并且动态切换。但是,行为是绝对路径,我需要一个相对路径。该Lua代码被编写为同时适用于Windows路径(反斜线)和Mac路径(正斜线)。
在我的Mac上,路径可能是/folder/folder/profile1.xml。在正常应用程序中,程序将返回profile1.xml的文件/位置。然后,它会找到同一个文件夹中的下一个配置文件。如果我使用相对链接(例如../profile2.xml)将应用程序定向到一个新文件夹,则程序将找到新文件并将文件/位置返回为../profile2.xml。然后,它将无法在同一文件夹中找到下一个配置文件......它正在查找下一步(../)中的下一个配置文件,还是在应用程序设置的原始文件夹内。我希望它能够在此新文件夹位置中找到下一个请求的配置文件。
设置当前配置文件和配置文件路径的现有代码如下:
local loadedprofile = '' --由应用程序设置
local profilepath = '' --由应用程序设置并在以下修改
相关的切换函数似乎是:
local function setDirectory(value)
profilepath = value
end
local function setFile(value)
if loadedprofile ~= value then
doprofilechange(value)
end
end
local function setFullPath(value)
local path, profile = value:match("(.-)([^\\/]-%.?([^%.\\/]*))$")
profilepath = path
if profile ~= loadedprofile then
doprofilechange(profile)
end
我正在考虑修改第三个函数的匹配条件,以删除../。也许删除可选的句点的内容是这样的:
local function setFullPath(value)
local path, profile = value:match("(.-)([^\\/]-([^%.\\/]*))$")
profilepath = path
if profile ~= loadedprofile then
doprofilechange(profile)
end
我真的不知道如何编写此代码,我只是尝试调整此开源代码(MIDI2LR)以适应我的需求。在我对代码的基本理解中,它似乎过于复杂。但是我想知道我是否正确地阅读它。我解释为:
:match("(.-)([^\\/]-%.?([^%.\\/]*))$")
(.-) --minimal return
( )$ --从配置文件路径的末端
^[^\\/]- --以\或\\或/开头,结果第一个值出现0次或更多次
%.? --通过,带有点是可选的
[^%.\\/]* --以.或\或\\或/开头,所有结果出现0次或更多次
如果我正确阅读它,那么第一个“以……开始”的内容似乎完全是多余的,或者“从末端开始”的内容应与第二个“以……开始”的内容相关联。
我已经注释了没有期望结果的setFullPath函数,这使我认为可能需要向setDirectory函数中添加匹配要求。
非常感谢任何帮助,因为我完全不了解此事。谢谢!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你对比赛的读取是不正确的,这里提供一个更准确的版本:
:match("(.-)([^\\/]-%.?([^%.\\/]*))$") (.-) -- 匹配并抓取前面的所有内容,直到第一个非斜杠字符 ( )$ -- 抓取直到最后一个字符 [^\\/]- -- 任何字符均以非反斜杠或反斜杠开头, 0 或多个结果的第一个字符 %.? -- 名称中间的单个点是可选的(例如在 something.ext 文件中的点) [^%.\\/]* -- 任何字符均以非句点、反斜杠或斜杠开头, 0 或多个结果一些注释说明 -
%.是字面上的点。[^xyz]是反向类,因此表示除了 x、y、z 之外的每个字符。\\实际上仅代表一个反斜杠,这是由于字符串转义造成的。这个更简单的版本会以类似的方式中断,但更易于处理:
value:match("(.-)([^\\/]+)$")你可能需要提供更多有关配置文件加载行为的信息,很难确定你需要代码执行什么操作。 在你提供的示例中,path 和 profile 的值会是什么?