Для Lua вам нужен модуль Lua Filesystem .
Как заметил Ник, доступ к самой файловой системе (в отличие от отдельных файлов) выходит за рамки стандартов C и C ++. Поскольку сам Lua (за исключением динамического загрузчика, используемого для реализации require () для модулей C) написан на стандартном языке C, в базовом языке отсутствуют многие функции файловой системы.
Однако ядро Lua легко расширить, поскольку (почти) любая платформа с файловой системой также поддерживает библиотеки DLL или общие библиотеки. Файловая система Lua - это переносимая библиотека, в которую добавлена поддержка итерации каталогов, обнаружения атрибутов файлов и т. П.
С 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 для Windows , то у вас уже установлена программа lfs, и приведенный выше пример будет работать из коробки.
Редактировать: Кстати, решение Lua также может быть разумным решением C или C ++. Ядро Lua совсем не велико, предоставляет динамический язык для сбора мусора и легко взаимодействует с C как в качестве хост-приложения, так и в качестве модуля расширения. Чтобы использовать lfs из приложения C, вы должны связать с Lua DLL, инициализировать состояние Lua и получить состояние для выполнения require"lfs"
либо через luaL_dostring()
, либо с помощью C API для получения функции require()
из в глобальной таблице нажмите строку "lfs"
и вызовите функцию Lua с чем-то вроде lua_pcall(L,1,1,0)
, в результате чего таблица lfs
окажется на вершине стека Lua.
Этот подход, вероятно, наиболее эффективен, если вам уже нужен встроенный язык сценариев, и Lua отвечает вашим требованиям.