Für Lua, möchten Sie das Modul Lua Filesystem.
Wie von Nick beobachtet, liegt der Zugriff auf das Dateisystem selbst (im Gegensatz zu einzelnen Dateien) außerhalb des Geltungsbereichs der C- und C++ - Standards. Da Lua selbst (mit Ausnahme des dynamischen Loaders, der zum Implementieren von require() für C-Module verwendet wird) in Standard C geschrieben ist, fehlen der Kernsprache viele Dateisystemfunktionen.
Es ist jedoch einfach, den Lua-Kern zu erweitern, da (fast) jede Plattform, die über ein Dateisystem verfügt, auch DLLs oder gemeinsam genutzte Bibliotheken unterstützt. Das Lua-Dateisystem ist eine portable Bibliothek, die Unterstützung für Verzeichnisiteration, Dateiattributentdeckung und dergleichen bietet.
Mit LFS ist einfach im Wesentlichen als ein Teil der Fähigkeit von DIR in Lua emuliert als:
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
Welche Ausgabe erzeugt, die wie folgt aussieht:
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:...>
Wenn Sie Ihre Kopie von Lua kam aus Lua for Windows, dann haben Sie bereits lfs installiert, und das obige Beispiel wird out of the box funktionieren.
Edit: Im Übrigen könnte die Lua-Lösung auch eine sinnvolle C oder C++ Lösung sein. Der Lua-Core ist überhaupt nicht groß, bietet eine dynamische, müllsammelbare Sprache und ist leicht mit C als Host-Anwendung oder als Erweiterungsmodul zu interagieren. Um lfs aus einer C-Anwendung zu verwenden, würden Sie eine Verknüpfung mit der Lua-DLL herstellen, einen Lua-Status initialisieren und den Status zum Ausführen der require"lfs"
entweder über luaL_dostring()
oder mithilfe der C-API zum Abrufen der require()
-Funktion aus der globalen Tabelle abrufen string "lfs"
, und rufen Sie die Lua-Funktion mit etwas wie lua_pcall(L,1,1,0)
, die die lfs
Tabelle oben auf dem Lua-Stapel verlässt.
Dieser Ansatz ist wahrscheinlich am sinnvollsten, wenn Sie bereits eine eingebettete Skriptsprache benötigen und Lua Ihren Anforderungen entspricht.
was meinst du "laden"? – bayda
laden, ausführen, suchen. Insbesondere mit lua benutze den "dofile (s)" Befehl für alles in einem dir – Jonas