lua使用lfs.dll库进行文件操作
在项目开发中,为了提高开发效率往往需要开发一些辅助工具。最近在公司用lua帮拓展了一个资源扫描的工具,这个工具的功能就是从原始demo下指定目标资源文件,对该文件进行读取并筛选过滤一遍然后拷贝到最终demo对应的文件目录下。
我们知道要读取一个文件必须指定对应路径,而我们在一个大型游戏软件开发中每个人所提交上去的资源都是在不同文件目录下的。所以原先的做法就是手动去把路径一个一个贴出来,整合记录到一个文本中,扫资源的时候先去该文本一行一行的拿路径,
根据路径获取目标文件并进行筛选拷贝操作等等。如果一个目录下的资源文件不多还好,要是策划批量上传了一堆特效文件或者贴图的话就苦逼了。qc要一个一个的去贴出路径来,这样的话工作效率就低下了,主要是文件特别多还会出现漏交的时候。
一旦漏交就相当于隐匿了一个巨大的炸弹随时会爆炸使游戏崩掉。所以为了解决这个问题,使用lua的lfs.dll帮了大忙(我们的资源扫描工具是用lua弄的)。
改进的想法是在记录路径的file_list.txt文件直接贴目标文件夹的路径,然后去获取改文件夹下所有的资源文件包括所有子目录下的所有文件并写回进file_list.txt。
具体的实现操作如下图:



代码很简单具体实现如下:
require "lfs"
local file_data = {}
add_file_data = function (str)
table.insert(file_data, str)
end
output_file_list = function ()
local file_list = io.open("file_list.txt", "w+")
if file_list then
for _, file_path in ipairs(file_data) do
file_list:write(file_path)
file_list:write("\n")
end
file_list:flush()
file_list:close()
end
end
find_file_indir = function(path, r_table)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..'\\'..file
local attr = lfs.attributes (f)
assert(type(attr) == "table")
if attr.mode == "directory" then
find_file_indir(f, r_table)
else
table.insert(r_table, f)
end
end
end
end
-- demo resource路径
SRC_RES_DIR = "L:\\demo\\"
--copy资源扫描文件夹
find_include_file = function(folder_path)
local target_path = folder_path
target_path = string.gsub(target_path, "\\", "/")
if string.match(target_path, "(.-)resource/+") then
target_path = string.gsub(target_path, "(.-)resource/", SRC_RES_DIR.."resource/")
end
local input_table = {}
find_file_indir(target_path, input_table)
local i=
while input_table[i]~=nil do
local input_path = input_table[i]
input_path = string.gsub(input_path, SRC_RES_DIR.."(.-)%.(%w+)", function(route, suffix)
local _path = route.."."..suffix
return _path
end)
input_path = string.gsub(input_path, "\\", "/")
add_file_data(input_path)
i=i+
end
end
local file = io.open("file_list.txt", "r")
if file then
local folder_path = file:read("*l")
while (folder_path) do
find_include_file(folder_path)
folder_path = file:read("*l")
end
file:close()
output_file_list()
end
注意:lfs.dll要放在lib文件夹下,但如果你想放其他地方的话,就需要加上它的默认索引环境,加上它的索引环境很简单在require的前面加上如下代码:package.cpath = "..\\你的.dll路径"
例如:package.cpath = "..\\res_copy\\bin\\sys_dll\\?.dll"
lua使用lfs.dll库进行文件操作的更多相关文章
- Lua中的一些库(1)
[数学库] 数学库(math)由一组标准的数学函数构成.这里主要介绍几个常用的函数,其它的大家可以自行百度解决. 三角函数(sin,cos,tan……)所有的三角函数都使用弧度单位,可以用函数deg( ...
- go文件操作大全
参考Go官方库的文件操作分散在多个包中,比如os.ioutil包,我本来想写一篇总结性的Go文件操作的文章,却发现已经有人2015年已经写了一篇这样的文章,写的非常好,所以我翻译成了中文,强烈推荐你阅 ...
- C/C++ 文件操作
C/C++ 文件操作大概有以下几种 1.C的文件操作: 2.C++的文件操作: 3.WINAPI的文件操作: 4.BCB库的文件操作: 5.特殊文件的操作. 当然了,水题时最常用的当然还是: freo ...
- C++ builder的文件操作
在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1.基于C的文件操作:2.基于C++的文件操作:3.基 ...
- 通过dll或def文件提取lib导入库文件
很多时候第三方库或其他项目提供的库多数会以动态库的形式提供dll以及相应的lib导入库.头文件,不过也有的只是提供dll和头文件,或者也提供了def模块定义(用于导出函数)文件,此时若使用将不得不调用 ...
- golang调用c++的dll库文件
最近使用golang调用c++的dll库文件,简单了解了一下,特作此笔记:一.DLL 的编制与具体的编程语言及编译器无关 dll分com的dll和动态dll,Com组件dll:不管是何种语言写的都可以 ...
- .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了 ...
- #Lua:Lua调用C++生成的DLL库
Lua调用C++生成的DLL库 本文参考了某大佬的博客,写得十分详细,推荐!!! 需求: 在之前的求解器中添加了Lua库,使得程序可以在Lua脚本中实现自定义函数功能,考虑到未来可能需要与第三方程序库 ...
- Linux C 文件操作,系统调用 -- open()、read() 和 标准I/O库 -- fopen()、fread()
函数汇总: open().write().read().close() fopen().fwrite().fread().fclose() 一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件 ...
随机推荐
- iOS 开发者中的个人账号与组织账号之间区别
苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...
- 程序员的vim
1,所有的Unix like系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在,但是目前我们使用比较多的是vim编辑器 vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序 ...
- JavaScript的高大强
1,JavaScript的引入方式 1.1>Script标签内写代码 <Script> //这里写JS代码的地方 </Script> 1.2>引入额外的JS文件 & ...
- SSH常见错误
错误一: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml] ...
- ranlib
1 ranlib的缩写 random access library 2 ranlib的作用 为静态库的符号建立索引,可以加速链接,因此称用ranlib处理过的library为random access ...
- Cg入门23: Fragment shader – UV动画(序列帧)
让动画从1-9循环播放此纹理 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...
- ABAP Debug 技巧
小技巧,可以在Debugger的时候跳过不想执行的代码, 或者返回执行已经执行过的代码,实际开发过程中很有帮助
- js用法2
1,网站cookie document.cookie 2, Web Storage相当于cookie,当存储量大于cookie localStorage 存储格式都是字符串 有效期,清空缓存前,永远存 ...
- I.MX6 wpa_cli 使用
/*********************************************************************** * I.MX6 wpa_cli 使用 * 说明: * ...
- POJ3617:Best Cow Line (贪心&&后缀数组)
FJ is about to take his N (1 ≤ N ≤ 2,000) cows to the annual"Farmer of the Year" competiti ...