Как говорится в названии; как загрузить каждый файл в каталог? Меня интересуют как C++, так и lua.
Изменить: для окон я был бы рад получить реальный рабочий код, особенно для lua. Я могу использовать boost::filesystem для С++.
Как говорится в названии; как загрузить каждый файл в каталог? Меня интересуют как C++, так и lua.
Изменить: для окон я был бы рад получить реальный рабочий код, особенно для lua. Я могу использовать boost::filesystem для С++.
Для 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 удовлетворяет вашим требованиям.
Список файлов в каталоге определяется платформой, поэтому вам придется использовать библиотеку, зависящую от платформы. Это верно для c++ и Lua (которые реализуют только функциональность ansi c).
dofile
вместо require
здесь: вы загружаете файлы, а не модули.
- person lhf; 07.03.2012