在lua中遍历目录文件需要用到lfs库,而所用的cocos2dx 3.10没用lfs,需要自己添加

1、下载lfs.c和lfs.h

https://github.com/keplerproject/luafilesystem

从github获取源码,在src目录拷贝lfs.c和lfs.h到cocos2d项目下cocos2d\external\lua\luafilesystem(luafilesystem为自己新建的文件夹)


2、在VS解决方案libluacocos2d项目下添加luafilesystem文件夹筛选器并承载lfs.c和lfs.h


3、修改lua_extensions.c文件

lua_extensions.c文件在cocos2d\cocos\scripting\lua-bindings\manual\network\目录下

新增如下两行代码:

#include"luafilesystem/lfs.h"和{"lfs",luaopen_lfs},

代码位置如下:

#include"lua_extensions.h"#if__cplusplusextern"C"{#endif//socket#include"luasocket/luasocket.h"#include"luasocket/luasocket_scripts.h"#include"luasocket/mime.h"#include"luafilesystem/lfs.h"staticluaL_Regluax_exts[]={{"socket.core",luaopen_socket_core},{"mime.core",luaopen_mime_core},{"lfs",luaopen_lfs},{NULL,NULL}};...


4、发布到安卓要修改Android.mk

在cocos2d\cocos\scripting\lua-bindings\proj.android目录下修改Android.mk

新增一行lfs.c路径

../../../../external/lua/luafilesystem/lfs.c

#networkLOCAL_SRC_FILES+=../manual/network/lua_cocos2dx_network_manual.cpp\../manual/network/lua_extensions.c\../manual/network/Lua_web_socket.cpp\../manual/network/lua_xml_http_request.cpp\../../../../external/lua/luasocket/auxiliar.c\../../../../external/lua/luasocket/buffer.c\../../../../external/lua/luasocket/except.c\../../../../external/lua/luasocket/inet.c\../../../../external/lua/luasocket/io.c\../../../../external/lua/luasocket/luasocket.c\../../../../external/lua/luasocket/luasocket_scripts.c\../../../../external/lua/luasocket/mime.c\../../../../external/lua/luasocket/options.c\../../../../external/lua/luasocket/select.c\../../../../external/lua/luasocket/serial.c\../../../../external/lua/luasocket/tcp.c\../../../../external/lua/luasocket/timeout.c\../../../../external/lua/luasocket/udp.c\../../../../external/lua/luasocket/unix.c\../../../../external/lua/luasocket/usocket.c\../../../../external/lua/luafilesystem/lfs.c

5、lua遍历文件范例(删除指定目录)

require"lfs"localfunctionremoveDir(path)print("os.rmdir:",path)ifcc.FileUtils:getInstance():isDirectoryExist(path)thenlocalfunction_rmdir(path)localiter,dir_obj=lfs.dir(path)whiletruedolocaldir=iter(dir_obj)ifdir==nilthenbreakendifdir~="."anddir~=".."thenlocalcurDir=path..dirlocalmode=lfs.attributes(curDir,"mode")ifmode=="directory"then_rmdir(curDir.."/")elseifmode=="file"thencc.FileUtils:getInstance():removeFile(curDir)endendendlocalsucc,des=cc.FileUtils:getInstance():removeDirectory(path)ifdesthenprint(des)endreturnsuccend_rmdir(path)endreturntrueend