在Windows XP SP3上获取当前工作目录的Lua是什么(或获取当前运行的Lua文件的目录)?我更喜欢不来使用LuaFileSystem。
我无法使用os.execute("cd")
,因为os.execute
始终从我的主目录开始(因此始终会产生C:\Documents and Settings\username
)。
答案 0 :(得分:16)
可能是一些丑陋的黑客,如
current_dir=io.popen"cd":read'*l'
答案 1 :(得分:8)
获取当前目录的正确方法是使用提供文件夹支持的库。有几个 - 我建议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
。
答案 2 :(得分:7)
您应该能够使用以下命令获取当前运行的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”
答案 3 :(得分:2)
我没有时间对此进行测试,但您是否尝试过os.getenv来读取Windows环境变量?
Windows有一个当前目录的环境变量:%CD%
os.getenv("CD")
编辑:在Windows 7上测试,当其他环境变量有效时(即%USERNAME%或%PROGRAMFILES%),CD var返回nil
答案 4 :(得分:0)
你可以使用alien来呼叫GetCurrentDirectory in kernel32.dll,但这可能不是你想要的。