通用型递归寻找文件软件/文件枚举

易语言 2020-02-25 20:35:50

通用型递归寻找文件软件/文件枚举

.如果真 (取反 (IsBadCodePtr (寻找文件句柄)))
hFileFind = __get (寻找文件句柄, 0)
flag = __get (寻找文件句柄, 4)
.判断开始 (flag = #文本型)
Type = #数据类型_文本型
.判断 (flag = #字节集型)
Type = #数据类型_字节集
.默认

.判断结束

.如果真结束
.如果真 (欲寻找文件的属性 ≤ 0)
欲寻找文件的属性 = 位或 (#只读文件, #隐藏文件, #系统文件, #存档文件)
.如果真结束
.如果真 (参数_是否为空 (2)) ' 欲寻找的文件或目录名称为空,表示寻找下一个文件
.如果真 (hFileFind ≤ 0 或 flag = 0) ' 如果文件句柄无效,返回空类型
置入代码 ({ 139, 69, 252, 139, 77, 244, 201, 194, 20, 0 })
.如果真结束
' 走到这里表示欲寻找的文件或目录名称为空,句柄有效
.判断循环首 (FindNextFileW (hFileFind, FileData))
.如果真 (位与 (欲寻找文件的属性, FileData.dwFileAttributes) = FileData.dwFileAttributes)
pAddr = 取数据_通用型_数组 (FileData.cFileName)
跳出循环 ()
.如果真结束

.判断循环尾 ()
.如果真 (flag = #文本型) ' 根据不同类型返回不同数据类型
Type = #数据类型_文本型
.如果真 (pAddr ≠ 0)
szStr = W2A_Addr (pAddr, , )
.如果真结束
置入代码 ({ 139, 69, 252, 139, 77, 244, 201, 194, 20, 0 })
.如果真结束
Type = #数据类型_字节集
.如果真 (pAddr ≠ 0)
wzStr = 指针到字节集 (pAddr, lstrlenW (pAddr) × 2 + 2)
.如果真结束
置入代码 ({ 139, 69, 248, 139, 77, 244, 201, 194, 20, 0 })
.如果真结束
' 走到这里就是 欲寻找的文件或目录名称 不为空,
.如果真 (hFileFind > 0) ' 如果传过来的句柄有效,则先释放,避免过多的泄漏
FindClose (hFileFind)
hFileFind = 0
LocalFree (寻找文件句柄)
.如果真结束
flag = _取变量数据 (欲寻找的文件或目录名称, wzText)
.如果真 (flag = 0) ' 用户传过来的不是文本型,也不是字节集,返回空类型
寻找文件句柄 = 0
置入代码 ({ 139, 69, 252, 139, 77, 244, 201, 194, 20, 0 })
' mov eax,[ebp-4]
' mov ecx,[ebp-12]
' leave
' ret 20
.如果真结束
hFileFind = FindFirstFileW (取指针_字节集型 (wzText), FileData)
.如果真 (hFileFind ≤ 0) ' hFileFind = #INVALID_HANDLE_VALUE 或 hFileFind = #ERROR_FILE_NOT_FOUND) ' 欲寻找的文件或目录名称有误
寻找文件句柄 = 0
.如果真 (flag = #文本型)
Type = #数据类型_文本型
置入代码 ({ 139, 69, 252, 139, 77, 244, 201, 194, 20, 0 })
' mov eax,[ebp-4]
' mov ecx,[ebp-12]
' leave
' ret 20
.如果真结束
Type = #数据类型_字节集
置入代码 ({ 139, 69, 248, 139, 77, 244, 201, 194, 20, 0 })
.如果真结束
寻找文件句柄 = LocalAlloc (#LMEM_ZEROINIT, 8) ' 申请8字节记录文件句柄和返回的数据类型
.如果真 (寻找文件句柄 = 0) ' 申请内存失败,也返回
置入代码 ({ 139, 69, 252, 139, 77, 244, 201, 194, 20, 0 })
.如果真结束
__set (寻找文件句柄, 0, hFileFind) ' 记录文件句柄,寻找下一个文件时使用
__set (寻找文件句柄, 4, flag) ' 记录返回数据类型
.如果真 (位与 (欲寻找文件的属性, FileData.dwFileAttributes) = FileData.dwFileAttributes) ' 第一次寻找就寻找到了匹配的文件
pAddr = 取数据_通用型_数组 (FileData.cFileName)
.如果真 (flag = #文本型) ' 根据不同类型返回不同数据类型
Type = #数据类型_文本型
szStr = W2A_Addr (pAddr, , )
置入代码 ({ 139, 69, 252, 139, 77, 244, 201, 194, 20, 0 })
.如果真结束
Type = #数据类型_字节集
wzStr = 指针到字节集 (pAddr, lstrlenW (pAddr) × 2 + 2)
置入代码 ({ 139, 69, 248, 139, 77, 244, 201, 194, 20, 0 })