Lua 食谱 |
|
标准版本的 Lua 本身不包含用于从文件系统获取文件或目录列表的可移植方法。原因是,为了可移植性,Lua 将自身限制为 ANSI C,而 ANSI C 本身不提供此功能。但是,这些功能通常可以通过操作系统获得(例如,POSIX 上的 readdir
,VC/Windows 上的 _findfirst / _findnext
,或纯 Win32(kernel32.dll)上的 FindFirstFile/FindNextFile
)。可以通过扩展库甚至 os.execute
调用 shell 来访问这些功能。
有一些 Lua 扩展库提供了类似的功能。 ExtensionProposal API 具有 os.dir
的 Windows 和 POSIX 实现。从 1.2 版本开始,LuaFileSystem [1] 有一个 lfs.dir
函数。lua-fs [2] 中有一个 readdir
,但它在撰写本文时(2007 年)使用的是 POSIX readdir
。另请参阅 PitLibDirectoryStuff。
可以通过 OS shell(os.execute
调用)进行一些不太可移植的黑客操作。请参阅 stdlib [3] 中用于 UNIX 的 io.readDir
函数。这种方法效率较低,因为它涉及进程创建。
也可以通过模拟函数在非 POSIX 系统上使用 POSIX readdir
。有一些 Win32 模拟了 POSIX readdir
及其相关函数 [4] [5]。另请参阅 mingw-runtime [6] 中的 mingwex/direct.c
。
另一种选择是通过 Lunatic Python [7] 使用 Python 的 os.listdir()
,如下所示。
require "python" pg = python.globals() pos = pg.import("os") x = pos.listdir(".") print(x)
Lua 5.1。