如何从一个目录中加载所有文件?
如标题所示; 我该如何加载目录中的每个文件?我对C++和Lua都很感兴趣。
编辑: 对于Windows,我很高兴提供一些真正有效的代码,特别是对于Lua。我可以通过boost::filesystem来完成C ++。
原文链接 https://stackoverflow.com/questions/710253
对于 Lua 来说,您需要使用模块 Lua Filesystem 。
正如 Nick 观察到的那样,访问文件系统本身(而不是单个文件)超出了 C 和 C++ 标准的范围。由于 Lua 本身(除了用于实现 C 模块 require() 的动态加载器之外)是用标准 C 编写的,因此核心语言缺少许多文件系统功能。
但是,扩展 Lua 核心很容易,因为(几乎)任何具有文件系统的平台都支持 DLL 或共享库。Lua Filesystem 是一个可移植的库,添加了对目录迭代、文件属性发现等的支持。
使用 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 作为宿主应用程序或扩展模块与其交互。要从 C 应用程序中使用 lfs,您需要链接 Lua DLL,初始化 Lua 状态,并使该状态执行 require "lfs"
,可通过 luaL_dostring()
或使用 C API 从全局表检索 require()
函数来完成,将字符串 "lfs"
推入栈顶,并通过 lua_pcall(L,1,1,0)
调用 Lua 函数,这使 lfs
表位于 Lua 栈的顶部。
如果您已经需要嵌入式脚本语言,并且 Lua 满足您的要求,则这种方法可能是最合适的。
require "lfs"
function loadall(dir)
for file in lfs.dir(dir) do
if string.find(file, ".lua$") then
dofile(dir .. "/".. file)
end
end
end
require "lfs"
function loadall(dir)
for file in lfs.dir(dir) do
if string.find(file, ".lua$") then
dofile(dir .. "/".. file)
end
end
end
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
在一个目录中列出文件是由平台定义的,因此你需要使用平台相关的库。这对于 c++ 和 Lua(只实现 ansi c 功能)都是成立的。