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