对于 Lua,你需要模块Lua文件系统 http://www.keplerproject.org/luafilesystem/.
正如 Nick 所观察到的,访问文件系统本身(而不是单个文件)超出了 C 和 C++ 标准的范围。由于 Lua 本身(除了用于实现 C 模块的 require() 的动态加载器之外)是用标准 C 编写的,因此核心语言缺乏许多文件系统功能。
然而,扩展 Lua 核心很容易,因为(几乎)任何具有文件系统的平台也支持 DLL 或共享库。 Lua 文件系统是一个可移植库,增加了对目录迭代、文件属性发现等的支持。
使用 lfs,在 Lua 中模拟 DIR 的一些功能本质上非常简单:
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 副本来自Windows 下的 Lua http://www.keplerproject.org/luafilesystem/,那么您已经安装了 lfs,并且上面的示例将开箱即用。
Edit:顺便说一句,Lua 解决方案也可能是一个合理的 C 或 C++ 解决方案。 Lua 核心并不大,提供了一种动态的、垃圾收集的语言,并且很容易与 C 进行交互,无论是作为托管应用程序还是作为扩展模块。要在 C 应用程序中使用 lfs,您需要链接 Lua DLL,初始化 Lua 状态,并获取该状态来执行require"lfs"
要么通过luaL_dostring()
或使用 C API 检索require()
从全局表中的函数,推送字符串"lfs"
,并使用类似的方式调用 Lua 函数lua_pcall(L,1,1,0)
,这使得lfs
表位于 Lua 堆栈的顶部。
如果您已经需要嵌入式脚本语言,并且 Lua 满足您的要求,那么这种方法可能最有意义。