获取Lua的当前工作目录

时间:2011-05-17 14:23:03

标签: windows-xp lua getcwd

在Windows XP SP3上获取当前工作目录的Lua是什么(或获取当前运行的Lua文件的目录)?我更喜欢来使用LuaFileSystem

我无法使用os.execute("cd"),因为os.execute始终从我的主目录开始(因此始终会产生C:\Documents and Settings\username)。

5 个答案:

答案 0 :(得分:16)

可能是一些丑陋的黑客,如

current_dir=io.popen"cd":read'*l'

答案 1 :(得分:8)

默认情况下,Lua没有“本地”方式支持“当前目录”的概念,或者实际上是“目录”的概念。

获取当前目录的正确方法是使用提供文件夹支持的库。有几个 - 我建议luafilesystem

安装完成后,您可以通过执行以下命令获取当前目录:

lfs.currentdir()

这适用于windows,linux和mac。

请注意,这些外部库通常涉及一些二进制包。根据您的设置,您可能必须先编译它才能使用它。

编辑:

请注意,当通过require包含文件时,表达式{...}[1]将返回require指令使用的路径。这不完全是路径,因为:

  • 它使用点来分隔目录并压缩文件末尾的.lua
  • 相对于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,但这可能不是你想要的。