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
test123
test4567
folder 123
folder 456
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\\")
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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With