c++ - 如何从目录加载所有文件?

标签 c++ file input lua io

如标题所说;如何加载目录中的每个文件?我对 c++ 和 lua 都感兴趣。

编辑: 对于 Windows,我很高兴有一些真正的工作代码,尤其是 lua。我可以使用 boost::filesystem for c++。

最佳答案

对于 Lua,您需要模块 Lua Filesystem .

正如 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 拷贝来自 Lua for Windows ,那么您已经安装了 lfs,并且上面的示例开箱即用。

编辑:顺便说一下,Lua 解决方案也可能是一个明智的 C 或 C++ 解决方案。 Lua 核心一点也不大,它提供了一种动态的垃圾收集语言,并且很容易与 C 交互,无论是作为托管应用程序还是作为扩展模块。要在 C 应用程序中使用 lfs,您需要链接 Lua DLL,初始化 Lua 状态,并通过 luaL_dostring() 获取执行 require"lfs" 的状态> 或使用 C API 从全局表中检索 require() 函数,推送字符串 "lfs",并使用类似 的内容调用 Lua 函数>lua_pcall(L,1,1,0),它将 lfs 表留在 Lua 堆栈的顶部。

如果您已经需要一种嵌入式脚本语言并且 Lua 满足您的要求,那么这种方法可能最有意义。

关于c++ - 如何从目录加载所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/710253/

相关文章:

jquery - 输入类型值错误 "Month"

c++ - 指向成员基函数的模板指针

file - 您可以在 Outlook 以外的任何软件中创建常用文件吗?

linux - 具有相同 inode 的操作系统符号链接(symbolic link)

c++ - 连续内存的InputIterator?

c - C 中 getChar 循环的字符数限制

c++ - 如何解析和显示 rosbag (C++) 发布的所有 rostopics 和消息

c++ - C 和 Python,找不到 Py_InitModule 方法

c++ - 在编写可移植的 c/c++ 程序时,使用外部文件的最佳方式是什么?

java - 文件输入/输出流与文件 channel ——提供更好的性能