web-dev-qa-db-ja.com

Luaの現在の作業ディレクトリを取得する

Windowsで現在の作業ディレクトリを取得するためのLuaは何ですかXP SP3(または現在実行中のLuaファイルのディレクトリを取得するため))?私はnot使用する LuaFileSystem

_os.execute_は常にホームディレクトリから開始するため、os.execute("cd")を使用できません(したがって、常に_C:\Documents and Settings\username_が生成されます)。

16
user600838

Luaには、デフォルトでは、「現在のディレクトリ」の概念、または実際には「ディレクトリ」の概念をサポートする「ネイティブ」な方法がありません。

現在のディレクトリを取得する適切な方法は、フォルダサポートを提供するライブラリを使用することです。いくつかあります-私はお勧めします luafilesystem

インストールしたら、次のコマンドを実行して現在のディレクトリを取得できます。

lfs.currentdir()

これは、Windows、Linux、Macで機能します。

ただし、これらの外部ライブラリには通常、いくつかのバイナリパッケージが含まれていることに注意してください。設定によっては、使用する前にコンパイルする必要がある場合があります。

編集:

ファイルがrequireを介して含まれている場合、式{...}[1]requireディレクティブで使用されるパスを返すことに注意してください。次の理由により、正確にパスではありません。

  • ドットを使用してディレクトリを区切り、ファイルの最後にある.luaを抑制します。
  • これは、luaプロセスが初期化されたパスに関連しています。
  • package.path の構成によって異なります

しかし、必要なのがファイルの「require-like path」だけである場合(おそらくその隣にファイルを要求するため)、ファイルの最初でこれを行うことでそれを取得できます。

local PATH = (...):match("(.+)%.[^%.]+$") or (...)

baz.luaというファイルがrequire 'foo.bar.baz'とともに必要な場合、PATHfoo.barになります。

8
kikito

多分いくつかの醜いハックのような

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

次の方法で、現在実行中のluaファイルパスを取得できるはずです。

debug.getinfo(1).short_src;

または

debug.getinfo(1).source;

次に、正規表現を含む現在のディレクトリ:

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

編集:実際には、フルパスでluaを実行している場合にのみ機能します。例:「lua.exeC:\ test\test.lua」であり、「lua.exetest.lua」ではありません

7
aryu

これをテストする時間がありませんでしたが、Windows環境変数を読み取るために os.getenv を試しましたか?

Windowsには、現在のディレクトリの環境変数があります:%CD%

os.getenv("CD")

編集:Windows 7でテストされ、他の環境変数(つまり、%USERNAME%または%PROGRAMFILES%)が機能している間、CD変数はnilを返します

3
Adam

alien を使用して kernel32.dllのGetCurrentDirectory を呼び出すこともできますが、それはおそらくあなたが探しているものではありません。

0