在 Windows XP SP3 上获取当前工作目录的 Lua 是什么(或获取当前运行的 Lua 文件的目录)?我不喜欢使用LuaFileSystem。
我不能使用os.execute("cd")
,因为os.execute
总是从我的主目录开始(因此总是 yield C:\Documents and Settings\username
)。
在 Windows XP SP3 上获取当前工作目录的 Lua 是什么(或获取当前运行的 Lua 文件的目录)?我不喜欢使用LuaFileSystem。
我不能使用os.execute("cd")
,因为os.execute
总是从我的主目录开始(因此总是 yield C:\Documents and Settings\username
)。
也许像一些丑陋的黑客
current_dir=io.popen"cd":read'*l'
Lua 默认没有“原生”方式来支持“当前目录”的概念,或者,事实上,“目录”的概念。
获取当前目录的正确方法是使用提供文件夹支持的库。有几个 - 我推荐luafilesystem。
安装后,您可以通过执行以下命令获取当前目录:
lfs.currentdir()
这将适用于 windows、linux 和 mac。
请注意,这些外部库通常涉及一些二进制包。根据您的设置,您可能必须先编译它才能使用它。
编辑:
请注意,当通过 包含文件时require
,表达式将返回指令{...}[1]
使用的路径。require
它不完全是路径,因为:
.lua
文件末尾的 。package.path
但是,如果您只需要文件的“类似要求的路径”(可能需要它旁边的文件),那么您可以通过在文件的开头执行此操作来获取它:
local PATH = (...):match("(.+)%.[^%.]+$") or (...)
如果调用的文件baz.lua
需要使用require 'foo.bar.baz'
,那么PATH
将是foo.bar
。
您应该能够通过以下方式获取当前运行的 lua 文件路径:
debug.getinfo(1).short_src;
或者
debug.getinfo(1).source;
然后是带有正则表达式的当前目录:
string.gsub(debug.getinfo(1).short_src, "^(.+\\)[^\\]+$", "%1");
编辑:实际上,只有在使用完整路径运行 lua 时才有效。例如:“lua.exe C:\test\test.lua”而不是“lua.exe test.lua”
我没有时间对此进行测试,但是您是否尝试过os.getenv来读取 Windows 环境变量?
Windows 有一个当前目录的环境变量:%CD%
os.getenv("CD")
编辑:在 Windows 7 上测试,当其他环境变量工作时(即 %USERNAME% 或 %PROGRAMFILES%),CD var 返回 nil
您可以使用外星人在 kernel32.dll中调用GetCurrentDirectory,但这可能不是您想要的。