получить текущий рабочий каталог в Lua

что такое Lua, чтобы получить текущий рабочий каталог в Windows XP SP3 (или получить каталог текущего файла Lua)? Я предпочитаю не использовать LuaFileSystem.

Я не могу использовать os.execute("cd"), потому что os.execute всегда начинается с моего домашнего каталога (и таким образом всегда дает C:Documents and Settingsusername).

5 ответов


Lua по умолчанию не имеет "родного" способа поддержки концепции "текущего каталога" или, по сути, концепции "каталога".

правильный способ получить текущий каталог-использовать библиотеку, которая обеспечивает поддержку папок. Их несколько - рекомендую luafilesystem.

после его установки, вы можете получить текущий каталог командой:

lfs.currentdir()

это будет работать на windows, linux и мак.

остерегайтесь, хотя эти внешние библиотеки обычно включают некоторые двоичные пакеты. В зависимости от вашей установки вам, возможно, придется скомпилировать его, прежде чем использовать.

EDIT:

обратите внимание, что когда файл включается через require, то выражение {...}[1] возвращает путь, используемый


может быть, какой-то уродливый хак, как

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

вы должны иметь возможность получить текущий путь к файлу lua с:

debug.getinfo(1).short_src;

или

debug.getinfo(1).source;

а затем текущий каталог с регулярным выражением:

string.gsub(debug.getinfo(1).short_src, "^(.+\)[^\]+$", "%1");

Edit: на самом деле это работает, только если вы используете lua с полным путем. например: "lua.exe C:\test\test - ... Луа", а не "Луа".тест ехе.lua"


У меня не было времени проверить это, но вы пробовали os.функции getenv для чтения переменных среды windows?

Windows имеет переменную среду для текущего каталога: %CD%

os.getenv("CD")

Edit: проверен на Windows 7 и в то время как другие переменные среды работы (т. е. %USERNAME% или %PROGRAMFILES%) CD var возвращает nil


можно использовать чужой на GetCurrentDirectory в kernel32.dll файлы, но это наверное не то, что вы ищете.