如何获取Lua中的目录列表 [英] How to get list of directories in Lua

查看:49
本文介绍了如何获取Lua中的目录列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一个 LUA 目录列表

I need a list of directory in LUA

假设我有一个目录路径为C:Program Files"

Suppose I have a directory path as "C:Program Files"

我需要该特定路径中所有文件夹的列表以及如何搜索该列表中的任何特定文件夹.

I need a list of all the folders in that particular path and how to search any particular folder in that list.

示例

需要路径C:Program Files"中所有文件夹的列表

Need a list of all the folder in path "C:Program Files"

以下是上述路径中的文件夹名称

Below are folder name in the above path

  1. test123

  1. test123

test4567

文件夹 123

文件夹 456

文件夹 456 789

folder 456 789

需要在列表中获取以上内容,然后必须仅在文件夹 456 789 中搜索特定字符串,例如文件夹 456.

Need to get the above in a list and then have to search for a particular string like folder 456 in folder 456 789 only.

已尝试以下代码.我在下面缺少的东西:-

Have Tried below code. Something I am missing below:-

local function Loc_Lines( str )
--
local ret= {}   -- 0 lines

while str do
    local _,_,line,tail= string.find( str, "(.-)
(.+)" )
    table.insert( ret, line or str )
    str= tail
  Print (str)
end

return ret
end


local function Loc_ShellCommand( cmd )
--
local str= nil

    --
    local f= io.popen( cmd )    -- no command still returns a handle :(
     if f then

        str= f:read'*a'
    Print(str)
        f:close()
    end
    
    if str=="" then   -- take no output as a failure (we can't tell..)
    Print("hi")
        str= nil
    end
 
-- Remove terminating linefeed, if any (eases up one-line analysis)
--
if str then
    if string.sub( str, -1 ) == '
' then
        str= string.sub( str, 1, -2 )
    end
end

return str
 end


 local function Loc_DirCmd( cmd )

 Print(cmd)

  local str= Loc_ShellCommand( cmd )



 return Loc_Lines(str)
 end


local function Loc_DirList( dirname )

 local ret= {}
  
    local lookup= {}

   local tbl= Loc_DirCmd( "dir /AD /B "..dirname )   -- only dirs

    -- Add slash to every dir line
    --
    for i,v in ipairs(tbl) do
        table.insert( ret, v..'\' )
        lookup[v]= true
    end       

    
    -- Return with forward slashes
    --
    if true then
        for i=1,table.getn(ret) do
            ret[i]= string.gsub( ret[i], '\', '/' )
     Print (ret[i])
        end
    end
  

   return ret
 end


 Loc_DirList("C:\Program Files\")

推荐答案

简单点,安装 lfs.然后使用以下结构来查找您需要的内容:

Take the easy way, install lfs. Then use the following constructs to find what you need:

require'lfs'
for file in lfs.dir[[C:Program Files]] do
    if lfs.attributes(file,"mode") == "file" then print("found file, "..file)
    elseif lfs.attributes(file,"mode")== "directory" then print("found dir, "..file," containing:")
        for l in lfs.dir("C:\Program Files\"..file) do
             print("",l)
        end
    end
end

注意反斜杠等于 [[]] 等于 "\",并且在 windows/中如果不在 cmd 本身上使用也是允许的(正确如果我在这一点上错了,我会告诉我).

notice that a backslash equals [[]] equals "\", and that in windows / is also allowed if not used on the cmd itself (correct me if I'm wrong on this one).

这篇关于如何获取Lua中的目录列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆