タイトルが言うように;ディレクトリ内のすべてのファイルをロードするにはどうすればよいですか?私はC++とluaの両方に興味があります。ディレクトリからすべてのファイルをロードする方法は?
編集: Windowsの場合は、実際の作業コード、特にluaにはうれしいでしょう。私はboost :: filesystem for C++でできます。
タイトルが言うように;ディレクトリ内のすべてのファイルをロードするにはどうすればよいですか?私はC++とluaの両方に興味があります。ディレクトリからすべてのファイルをロードする方法は?
編集: Windowsの場合は、実際の作業コード、特にluaにはうれしいでしょう。私はboost :: filesystem for C++でできます。
ルアについては、モジュールLua Filesystemが必要です。
Nickが観察したように、(個々のファイルではなく)ファイルシステム自体にアクセスすることは、CおよびC++標準の範囲外です。 C言語で書かれたLua自体は(Cモジュールのrequire()を実装するために使われた動的ローダを除いて)、コア言語には多くのファイルシステム機能がありません。
しかし、(ほぼ)ファイルシステムを持つプラットフォームは、DLLまたは共有ライブラリもサポートしているため、Luaコアを拡張するのは簡単です。 Luaファイルシステムは、ディレクトリの反復、ファイル属性の発見などのサポートを追加するポータブルライブラリです。 LFSで
、基本的にLuaの中DIRの機能のいくつかをされたエミュレートするような単純なよう:ルアのコピーがどこから来た場合は
E:...>t-lfs.lua
. directory 2009-04-02 13:23 0
.. directory 2009-04-02 13:18 0
foo.txt file 2009-02-23 01:56 0
t-lfs.lua file 2009-04-02 13:18 241
E:...>
:ように見える出力を生成
require "lfs"
dot = arg[1] or "."
for name in lfs.dir(dot) do
local fqn = dot.."/"..name
local attr = lfs.attributes(fqn)
print(name, attr.mode, os.date("%Y-%m-%d %H:%M",attr.modification), attr.size)
end
Lua for Windowsの場合、すでにlfsがインストールされており、上記のサンプルはそのまま使用できます。
編集:ちなみに、LuaソリューションはCまたはC++の賢明なソリューションでもあります。 Luaコアはまったく大きくなく、ガベージコレクション言語を動的に提供し、ホスティングアプリケーションや拡張モジュールとしてCから簡単にやりとりすることができます。 Cアプリケーションからlfsを使用するには、Lua DLLにリンクし、Lua状態を初期化し、を実行するように状態を取得するか、C APIを使用してグローバルテーブルからrequire()
関数を取得し、文字列"lfs"
を呼び出して、テーブルをLuaスタックの最上部に残した、lua_pcall(L,1,1,0)
のようなものでLua関数を呼び出します。
この方法は、既に埋め込みスクリプト言語が必要な場合に最も適しており、Luaは要件を満たしています。
ディレクトリ内のファイルのリストはプラットフォームによって定義されているため、プラットフォームに依存するライブラリを使用する必要があります。これは、C++とLua(ansi cの機能のみを実装する)にも当てはまります。
C++ソリューションについては、Boost.Filesystemライブラリをご覧ください。
require "lfs"
function loadall(dir)
for file in lfs.dir(dir) do
if string.find(file, ".lua$") then
dofile(dir .. "/".. file)
end
end
end
ここでは 'require'の代わりに' dofile'を使用してください:モジュールではなくファイルをロードしています。 – lhf
ありがとう@lhf、私はコードを修正しました。 –
"ロード"とは何ですか? – bayda
ロード、実行、検索特にluaの場合は、ディレクトリ内のすべてのファイルに対して "dofile(s)"コマンドを使用してください。 – Jonas