lua使用io.open跨平台文件夹遍历匹配查找

  -- Desc :实现在LUA_PATH中的lua文件中遍历寻找没用到PNG_PATH路径下的png图片,并将其打印出来。  -- Date :12:49:28 2014-09-04  1 print("Lua Script Start")
 2
 3 function getFileName( path )
 4     len = string.len(PNG_PATH);
 5     return string.sub(path, len+2) --  remove "/"
 6 end
 7
 8 function isInIt( file,name )
 9     --print(file .. " -- " .. name )
10     for line in io.lines(file) do
11         if isContain(line , name) then
12             return true;
13         end
14     end
15     return false;
16 end
17
18 function isContain( line , str )
19     return string.find(line , str);
20 end
21
22 PNG_PATH = "user/image"
23 getPngFileTable = io.popen(‘find * ‘ .. PNG_PATH)
24
25 pngFileTable = {};
26 for file in getPngFileTable:lines() do
27     if string.find(file,"%.png$") then
28         fileName = getFileName(file);
29         print(fileName)
30         table.insert(pngFileTable,fileName);
31     end
32 end
33 print("png count is :"..#pngFileTable);
34
35 LUA_PATH = "user/scripts"
36 getLuaFileInfo = io.popen(‘find * ‘ .. LUA_PATH)
37 luaFileTable = {};
38 for file in getLuaFileInfo:lines() do
39     if string.find(file,"%.lua$") then
40         --print(file)
41         table.insert(luaFileTable,file);
42     end
43 end
44
45 local pairs = pairs
46 for _,name in pairs(pngFileTable) do
47     flag = 0;
48     for _,file in pairs(luaFileTable) do
49         if isInIt(file , name) then
50             flag = 1;
51             break;
52         end
53     end
54     if flag == 0 then
55         print(name)
56     end
57 end
58
59 print("Lua Script End!")
60
61 --Desc: lua io.popen ([prog [, mode]])
62     --Starts program prog in a separated process and returns a file handle that
63     --you can use to read data from this program (if mode is "r", the default)
64     --or to write data to this program (if mode is "w").
65     --This function is system dependent and is not available on all platforms.

注:

1: io.popen()简易说明  Lua中,os.execute可以执行dos命令,但是返回的是系统状态码,默认输出

io.popen()也可以执行dos命令,但是返回一个文件。eg:

  local t = io.popen(‘svn help‘)

  local a = t:read("*all")   --a返回一个字符串,内容是svn help的内容

  如果想执行某命令或程序可选os.execute() , 如果还想捕捉该执行结果可用io.popen(),得到的是userdata数据类型;

  eg:复制文件 os.execute("copy" .. originalPath .. "," .. backupPath)

2: io.popen() 是跨平台的,却也跟系统有关,在windows下无法取得访问文件夹的权限,屡次尝试都没成功,liunx和mac下可以;

3: 目前还不得知,使用io.poen()遍历的png图片竟然会 遍历了两边,造成结果是一半为脏数据,记载此文时还在查找原因,不解啊;

时间: 2024-10-28 21:04:21

lua使用io.open跨平台文件夹遍历匹配查找的相关文章

使用IO流复制文件夹(包括子目录)

IO流用于处理设备上的数据(包括硬盘,内存,键盘录入). IO流可根据流向不同分为输入流和输出流,根据处理数据类型不同分为字节流和字符流. 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区别: a.读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节. b.处理对象不同:字节流能处理所有类型的数据(如图片.avi等),而字符流只能处理字符类型的数据. 结论:

windows编程之文件夹遍历

利用windows的API,FindFirstFile和FileNextFile,采用递归遍历指定文件夹中的所有文件及文件夹,第一次windows编程,代码写的很臃肿难看,请大家多多包涵! <pre name="code" class="cpp">#include<cstdio> #include<cstring> #include<iostream> #include<windows.h> #define

多线程IO操作(扫描文件夹并计算总大小)

场景为,给到一个硬盘上文件或文件夹,(当然文件夹时,多线程的优势才能越发体现出来),得到该文件或文件夹的大小和计算该结果所需要的时间. 首先是单线程下的例子,这个可难不倒大家,代码如下: 01 public class TotalFileSizeSequential { 02   private long getTotalSizeOfFilesInDir(final File file) { 03     if (file.isFile()) return file.length(); 04  

LINUX 拥有遍历文件夹功能的 查找关键字 文件、文件夹

查找文件: [[email protected] admin]# find . -type f -name "a.txt" ./Downloads/hadoop-2.10.0/a.txt 拥有遍历文件夹功能的 查找关键字 文件.文件夹: [[email protected] admin]# vi a [[email protected] admin]# find /home/admin/ -type f | xargs grep "i like apple" Bin

使用IO流对文件夹的复制(文件夹中带有子目录)

当我们要复制带有子目录的文件夹的时候,就必须使用递归,这样才能把全部的文件夹都复制到位 思路和步骤: 对于文件夹的复制,分2种情况               (1)当我们对文件进行遍历的时候,如果目标文件夹下的文件是个标准文件的话,我们就可以直接去做复制的动作,               (2)当目标文件中,是带有文件夹的文件,那么这个时候就需要对文件夹进行递归,直到最后它是个标准文件后,我们在做复制动作 有了上述的2种情况后,那么这个需求,需要提供2种方法,1是对标准文件的复制,2是对带有

利用Java IO复制多级文件夹

package package1; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy {         private static File newDest = null;         private static FileInputStream fis = null;    

文件读写&amp;文件夹遍历

 文件读写 读文件(行) private void readFile(File file) throws IOException { FileInputStream stream = null; stream = new FileInputStream(file); DataInputStream sysin = new DataInputStream(stream); String line = null; while ((line = sysin.readLine()) != null)

python实现文件夹遍历

python 中os.path模块用于操作文件或文件夹 os.path.exists(path) 判断文件路径是否存在 dir = "c:\windows"if os.path.exists(dir) : print "dir exists"else : print "no exists" os.path.isfile(path) 判断path是否是文件 dir = "c:\windows\system32\cmd.exe"i

java io流 对文件夹的操作

检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文件操作方法通用,因为都是一个类 //对文件夹的操作 //检查文件夹是否存在 //显示文件夹下面的文件 //.... import java.io.*; import java.util.*; public class Index{ public static void main(String[] args) throws Excep