c++ - ficheros - ¿Cómo cargar todos los archivos de un directorio?
ficheros c++ (4)
La plataforma define los archivos de un directorio, por lo que deberá usar una biblioteca dependiente de la plataforma. Esto es cierto para c ++ y Lua (que implementa solo la funcionalidad ansi c).
Como dice el título; ¿Cómo cargo cada archivo en un directorio? Estoy interesado en c ++ y lua.
Editar: Para windows, me alegraría tener un código de trabajo real y especialmente para lua. Lo puedo hacer con boost :: filesystem para c ++.
Para una solución C ++, eche un vistazo a la biblioteca Boost.Filesystem .
Para Lua, quieres el módulo Lua Filesystem .
Como observó Nick, acceder al propio sistema de archivos (a diferencia de los archivos individuales) está fuera del alcance de los estándares C y C ++. Dado que el propio Lua es (con la excepción del cargador dinámico utilizado para implementar require () para los módulos C) escrito en el estándar C, el lenguaje central carece de muchas características del sistema de archivos.
Sin embargo, es fácil ampliar el núcleo de Lua ya que (casi) cualquier plataforma que tenga un sistema de archivos también admite archivos DLL o bibliotecas compartidas. El sistema de archivos Lua es una biblioteca portátil que agrega soporte para iteración de directorios, descubrimiento de atributos de archivos y similares.
Con lfs, emular algunas de las capacidades de DIR en Lua es esencialmente tan simple como:
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
Que produce un resultado que se ve así:
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:...>
Si su copia de Lua proviene de Lua para Windows , entonces ya tiene instalado lfs, y la muestra anterior funcionará de la caja.
Editar: Por cierto, la solución de Lua también podría ser una solución sensible de C o C ++. El núcleo de Lua no es para nada grande, proporciona un lenguaje dinámico y recogido de basura, y es fácil interactuar con C como una aplicación de alojamiento o como un módulo de extensión. Para usar lfs desde una aplicación C, debe enlazar con la DLL Lua, inicializar un estado Lua y obtener el estado para ejecutar el require"lfs"
ya sea a través de luaL_dostring()
o mediante el API C para recuperar la función require()
de la tabla global, presione la cadena "lfs"
y llame a la función Lua con algo como lua_pcall(L,1,1,0)
, que deja la tabla lfs
en la parte superior de la pila de Lua.
Este enfoque probablemente tenga más sentido si ya tiene una necesidad de un lenguaje de scripting incorporado, y Lua cumple con sus requisitos.
require "lfs"
function loadall(dir)
for file in lfs.dir(dir) do
if string.find(file, ".lua$") then
dofile(dir .. "/".. file)
end
end
end