如何在Windows XP SP3上获取当前工作目录的Lua代码(或获取当前运行的Lua文件的目录)? 我不想使用LuaFileSystem。
我不能使用os.execute("cd")
,因为os.execute
始终从我的主目录开始(因此始终产生C:\Documents and Settings\username
)。
如何在Windows XP SP3上获取当前工作目录的Lua代码(或获取当前运行的Lua文件的目录)? 我不想使用LuaFileSystem。
我不能使用os.execute("cd")
,因为os.execute
始终从我的主目录开始(因此始终产生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
的配置。但是如果你只需要文件的“require-like路径”(也许是为了要求旁边的文件),那么你可以在文件开始时执行以下操作:
local PATH = (...):match("(.+)%.[^%.]+$") or (...)
如果使用require 'foo.bar.baz'
来引入名为baz.lua
的文件,则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”。
debug.getinfo(1).source
并将正则表达式更改为string.gsub(debug.getinfo(1).source, "^@(.+/)[^/]+$", "%1")
。 - Gus E我还没有时间测试,但你是否尝试过使用os.getenv读取Windows环境变量?
Windows有一个当前目录的环境变量:%CD%
os.getenv("CD")
编辑: 在Windows 7上进行了测试,虽然其他环境变量有效(例如%USERNAME%或%PROGRAMFILES%),但CD变量返回nil。
os.getenv("PWD")
on mac - Robert Ranjan我尝试了所有这些答案,但都没有起作用。我测试了以下脚本,它按预期工作。
io.popen("cd"):read()
os.execute("cd")
相同的效果。 - user600838print(io.popen("ls").__gc)
。 - Craig Barnesnil
。 - jdhao