如何从一个目录中加载所有文件?

如标题所示; 我该如何加载目录中的每个文件?我对C++和Lua都很感兴趣。

编辑: 对于Windows,我很高兴提供一些真正有效的代码,特别是对于Lua。我可以通过boost::filesystem来完成C ++。

原文链接 https://stackoverflow.com/questions/710253

点赞
stackoverflow用户30470
stackoverflow用户30470

在一个目录中列出文件是由平台定义的,因此你需要使用平台相关的库。这对于 c++ 和 Lua(只实现 ansi c 功能)都是成立的。

2009-04-02 15:40:57
stackoverflow用户19254
stackoverflow用户19254

对于 C++ 解决方案,请查看 Boost.Filesystem 库。

2009-04-02 15:43:14
stackoverflow用户68204
stackoverflow用户68204

对于 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 满足您的要求,则这种方法可能是最合适的。

2009-04-02 20:27:38
stackoverflow用户207927
stackoverflow用户207927
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
2012-03-07 12:24:24