Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get list of directories in Lua

I need a list of directory in LUA

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.

Example

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

Below are folder name in the above path

  1. test123

  2. test4567

  3. folder 123

  4. folder 456

  5. folder 456 789

    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, "(.-)\n(.+)" )     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 ) == '\n' 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\\") 
like image 213
che Avatar asked Mar 14 '11 19:03

che


1 Answers

I hate having to install libraries (especially those that want me to use installer packages to install them). If you're looking for a clean solution for a directory listing on an absolute path in Lua, look no further.

Building on the answer that sylvanaar provided, I created a function that returns an array of all the files for a given directory (absolute path required). This is my preferred implementation, as it works on all my machines.

-- Lua implementation of PHP scandir function function scandir(directory)     local i, t, popen = 0, {}, io.popen     local pfile = popen('ls -a "'..directory..'"')     for filename in pfile:lines() do         i = i + 1         t[i] = filename     end     pfile:close()     return t end 

If you are using Windows, you'll need to have a bash client installed so that the 'ls' command will work - alternately, you can use the dir command that sylvanaar provided:

'dir "'..directory..'" /b /ad' 
like image 188
Bobby Oster Avatar answered Sep 29 '22 03:09

Bobby Oster