from http://sunxiunan.com/?p=1285
目的:使用lua进行某个目录下特定类型或指定文件名的查找,并给出一个查找使用核心对象的函数实例。
require"lfs"
function findindir (path, wefind, r_table, intofolder)
for file in
lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..'\\'..file
--print ("\t "..f)
if
string.find(f, wefind) ~= nil then
--print("\t "..f)
table.insert(r_table, f)
end
local
attr = lfs.attributes (f)
assert (type(attr) ==
"table")
if attr.mode == "directory" and intofolder
then
findindir (f, wefind, r_table,
intofolder)
else
--for name, value in
pairs(attr) do
-- print (name, value)
--end
end
end
end
end
要注意的是,这段代码使用了LuaFileSystem模块,最好使用Lua for windows这个统合安装包,里面已经包含了。
使用方法很简单,比如我想查找c盘下temp目录的所有cpp文件:
local currentFolder =
[[C:\temp]]
-------------------------------------
local input_table =
{}
findindir(currentFolder, "%.cpp", input_table, true)
查找到的结果放在input_table中。另外可以使用第四个参数控制是否查找子目录。
给出一个实际的例子,想查找那些函数可能使用kernal
object,通过它可以帮助查找是否可能存在handle泄露的情况。当我们找到文件,会在里面查找这些函数名,然后打印出行号。
参考文档是http://msdn.microsoft.com/en-us/library/ms724485%28VS.85%29.aspx
local currentFolder = [[C:\temp]]
local input_table = {}
findindir(currentFolder, "%.cpp", input_table,
true)
findindir(currentFolder, "%.h", input_table, true)
local tbl_found1 = {"CreateRestrictedToken",
"DuplicateToken",
"DuplicateTokenEx",
"OpenProcessToken",
"OpenThreadToken",
"FindFirstChangeNotification",
"CreateFile",
"GetThreadDesktop",
"OpenProcessToken",
"CreateEvent",
"CreateEventEx",
"OpenEvent",
"OpenEventLog",
"RegisterEventSource",
"OpenBackupEventLog",
"CreateFile",
"CreateFileMapping",
"OpenFileMapping",
"FindFirstFile",
"HeapCreate",
"CreateIoCompletionPort",
"CreateJobObject",
"CreateMailslot",
"CreateMemoryResourceNotification",
"LoadLibrary",
"GetModuleHandle",
"CreateMutex",
"CreateMutexEx",
"OpenMutex",
"CreateNamedPipe",
"CreatePipe",
"CreateProcess",
"OpenProcess",
"GetCurrentProcess",
"CreateSemaphore",
"CreateSemaphoreEx",
"OpenSemaphore",
"socket",
"accept",
"CreateThread",
"CreateRemoteThread",
"GetCurrentThread",
"CreateWaitableTimer",
"CreateWaitableTimerEx",
"OpenWaitableTimer",
"BeginUpdateResource",
"GetProcessWindowStation",}
local tbl_found2 = {"CloseHandle",
"FindCloseChangeNotification",
"CloseEventLog",
"DeleteFile",
"FindClose",
"HeapDestroy",
"FreeLibrary",
"TerminateProcess",
"closesocket",
"EndUpdateResource",
"DeregisterEventSource",}
local tbl_result1 = {}
local tbl_result2 = {}
for _, foundname in ipairs(input_table) do
local f =
assert(io.open(foundname, "rb"))
local linenum = 0
while true
do
local buffer = f:read("*l")
linenum = linenum +
1
if not buffer then
break
end
for ie = 1, table.maxn(tbl_found1) do
local start1,
end1 = string.find(buffer, tbl_found1[ie])
local start2, end2 =
string.find(buffer, "//")
if start1 then
if
start2 and start2 < start1 then
else
print("----------------------------------")
print(buffer,
"\nline: " .. linenum, "\nfile: " .. foundname)
print("")
if tbl_result1[tbl_found1[ie]] == nil
then
tbl_result1[tbl_found1[ie]] =
1
else
tbl_result1[tbl_found1[ie]] = tbl_result1[tbl_found1[ie]] +
1
end
end
end
end
for i2 = 1, table.maxn(tbl_found2) do
local start1,
end1 = string.find(buffer, tbl_found2[i2])
local start2, end2 =
string.find(buffer, "//")
if start1 then
if
start2 and start2 < start1 then
else
print("----------------------------------")
print(buffer,
"\nline: " .. linenum, "\nfile: " .. foundname)
print("")
if tbl_result2[tbl_found2[i2]] == nil
then
tbl_result2[tbl_found2[i2]] =
1
else
tbl_result2[tbl_found2[i2]] = tbl_result2[tbl_found2[i2]] +
1
end
end
end
end
end
end
print("result table1 -------------------")
print_table(tbl_result1)
print("")
print("result table2
-------------------")
print_table(tbl_result2)
分享到:
- 2009-08-24 09:12
- 浏览 3166
- 评论(1)
- 论坛回复 / 浏览 (1 / 3115)
- 查看更多
相关推荐
总的来说,“lua5.1 + luarocks for windows64安装版”是一个完整的Lua开发环境,适合在64位Windows操作系统上进行Lua编程。它提供了必要的运行时环境和便捷的包管理工具,使得开发者能够在Windows平台上轻松地开发...
在Windows上安装ngx_lua_module,需要先下载并安装Nginx,然后将模块解压至Nginx的`modules`目录。修改Nginx配置文件,加入模块的编译选项,并配置lua脚本路径。最后,重新编译并启动Nginx。 5. **学习与资源** ...
在Windows环境下,Lua for Windows提供了集成的命令行工具,用户可以直接在命令行窗口中输入Lua代码并立即执行,非常适合进行快速测试和调试。此外,由于Lua语言的灵活性,它可以被广泛应用于游戏开发、网络编程、...
你需要将提供的luaCocos2dx.api和lua.properties文件复制到Scite安装目录下的相应位置,覆盖原有的文件。这样,Scite就能识别并加载cocos2dx的API信息,实现代码提示功能。 为了正确使用这套API提示文件,你需要...
3. **安装与配置**: 安装LuaForWindows时,通常会自动添加环境变量,使得lua可执行文件能在任何目录下通过命令行调用。若未自动添加,你需要手动将Lua安装目录添加到系统的PATH环境变量中。这样,无论你在哪个目录下...
LuaForWindows提供的强大功能和友好的用户界面使得在Windows环境下使用Lua变得简单而高效。而`vcredist_x86.exe`则确保了所有必要的系统组件得以正确运行,从而避免了因缺少库文件而导致的错误。
这是因为Windows在查找动态链接库时会沿着当前目录、系统路径等搜索。如果不在正确的位置,程序可能会因找不到依赖而失败。 6. **运行测试**:使用命令行工具(如cmd或PowerShell)在测试目录下运行`lua test.lua`...
lua for windows其实是一整套Lua的开发环境.Lua for Windows 为 Windows 系统下提供了 Lua 脚本语言的开发和运行环境。Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用...
3. 配置环境变量`LUA_PATH`和`LUA_CPATH`,这些变量指定了Lua在查找模块(`.lua`文件)和加载库(`.dll`文件)时的搜索路径。 了解了这些基本知识后,你就可以开始在Windows上编写和运行Lua脚本了。Lua语言简洁明了...
标题中的“lua-5.1.tar.gz”和“Mylua-5.1.tar.gz”是两个压缩包文件,分别包含了Lua编程语言的5.1版本源代码。Lua是一种轻量级的脚本语言,广泛用于游戏开发、嵌入式系统、服务器配置等场景。"lua生成动态库"意味着...
在Windows环境下,`dir /b /s`命令会以简洁模式列出指定目录及其所有子目录下的文件,包括文件名和扩展名。而在Linux中,`ls`命令可以列出当前目录下的文件,如果需要递归列出所有子目录,可以使用`find . -type f`...
LuaForWindows还包括了Lua的调试功能,例如断点设置、变量查看和步进执行等,这对于理解代码的执行流程和查找错误至关重要。通过这些调试工具,开发者可以有效地追踪代码执行,定位并修复问题。 资源包中的另一个...
Lua 动态库是将 Lua 编译为可动态加载的库(.so 文件,Linux 下)或 DLL 文件(Windows 下),这样可以在运行时与其他程序动态链接。创建 Lua 动态库的配置可能需要在编译时使用 `-shared` 选项,并可能需要指定其他...
`LuaSource`目录可能包含了所有LUA5.2.2的核心源码文件,如`lua.c`(LUA解释器)、`lua.h`(头文件)等。 - **编译设置**:在VS中,你需要配置项目的属性页,确保选择正确的C/C++编译器和链接器选项,以便正确编译...
3. **项目管理**:插件支持创建和管理Lua项目,可以组织和编译多个Lua文件,方便构建复杂的系统。 4. **集成资源管理**:BabeLua还能够管理和打包项目中的资源文件,如图像、音频等,这对于游戏开发尤其有用。 5. ...
在Windows系统中,当程序需要使用Lua功能时,会依赖这样的DLL文件。它包含了执行Lua脚本所需的全部函数和数据结构,使得其他程序可以调用Lua的API来运行或解析Lua代码。 luac.exe是Lua的编译器,全称为Lua Compiler...
描述中提到的“将拖入BAT的文本按规则替换(lUa语言实现 方便维护)”,意味着这个Lua脚本会接收用户通过拖放操作导入的批处理文件,然后根据预定义的规则对文件中的文本进行查找和替换。这可能是为了更新批量的...
在这个例子中,`dll_call_to_lua`函数查找LUA全局变量`lua_function`,并尝试调用它,传递一个字符串参数。LUA函数应接受这个参数并执行相应操作。 提供的资源中包含了一个名为"8.Lua讲解.exe"的视频教程,可能详细...
1. **LUA安装程序**:这可能是一个用于在不同操作系统上安装LUA解释器的程序,例如Windows上的.exe文件或Linux/Mac下的.tar.gz文件。安装程序会帮助用户配置环境变量,使他们能够在命令行或其他集成开发环境中执行...
使用这个项目文件,开发者可以直接在VS2010中打开、编译和调试Lua源码,这对于理解Lua的工作原理和进行开发工作极具价值。 总的来说,掌握Lua5.1源码对于提升对脚本语言的理解,尤其是对Lua的使用和优化,具有显著...