2009-04-02 7 views
2

タイトルが言うように;ディレクトリ内のすべてのファイルをロードするにはどうすればよいですか?私はC++とluaの両方に興味があります。ディレクトリからすべてのファイルをロードする方法は?

編集: Windowsの場合は、実際の作業コード、特にluaにはうれしいでしょう。私はboost :: filesystem for C++でできます。

+0

"ロード"とは何ですか? – bayda

+0

ロード、実行、検索特にluaの場合は、ディレクトリ内のすべてのファイルに対して "dofile(s)"コマンドを使用してください。 – Jonas

答えて

8

ルアについては、モジュール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は要件を満たしています。

2

ディレクトリ内のファイルのリストはプラットフォームによって定義されているため、プラットフォームに依存するライブラリを使用する必要があります。これは、C++とLua(ansi cの機能のみを実装する)にも当てはまります。

1
require "lfs" 

function loadall(dir) 
    for file in lfs.dir(dir) do 
    if string.find(file, ".lua$") then 
     dofile(dir .. "/".. file)  
    end 
    end 
end 
+0

ここでは 'require'の代わりに' dofile'を使用してください:モジュールではなくファイルをロードしています。 – lhf

+0

ありがとう@lhf、私はコードを修正しました。 –

関連する問題