Для Lua требуется модуль Lua Filesystem.
Как заметил Ник, доступ к самой файловой системе (в отличие от отдельных файлов) выходит за рамки стандартов C и C++. Поскольку сам Lua (за исключением динамического загрузчика, используемого для реализации require() для модулей C), написанного на стандартном C, на основном языке не хватает многих функций файловой системы.
Тем не менее, легко расширить ядро Lua, так как практически любая платформа, в которой есть файловая система, также поддерживает библиотеки DLL или разделяемые библиотеки. Lua File system - это портативная библиотека, которая добавляет поддержку итерации каталогов, обнаружения атрибутов файлов и т. П.
С LFS, эмулирует некоторые из возможностей DIR в Lua, по существу, так же просто, как:
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
Который производит вывод, который выглядит следующим образом:
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:...>
Если ваша копия Lua пришел из Lua for Windows, то вы уже установили lfs, и вышеприведенный образец будет работать из коробки.
Редактировать: Кстати, решение Lua также может быть разумным решением C или C++. Ядро Lua совсем не велико, обеспечивает динамический, собранный мусором язык и легко взаимодействует с C либо как хостинг-приложение, либо как модуль расширения. Чтобы использовать lfs из приложения C, вы должны установить связь с Lua DLL, инициализировать состояние Lua и получить состояние для выполнения require"lfs"
либо через luaL_dostring()
, либо с помощью C API для извлечения из таблицы require()
функции из глобальной таблицы. string "lfs"
, и вызовите функцию Lua с чем-то вроде lua_pcall(L,1,1,0)
, которая оставляет таблицу lfs
в верхней части стека Lua.
Этот подход, вероятно, имеет наибольший смысл, если у вас уже есть необходимость в встроенном скриптовом языке, а Lua соответствует вашим требованиям.
что вы подразумеваете под «нагрузкой»? – bayda
загрузить, запустить, найти. В частности, с помощью lua используйте команду «dofile (s)» для всего, что находится в каталоге – Jonas