If I have this code
local f = io.open("../web/", "r")
print(io.type(f))
-- output: file
how can I know if f
points to a directory?
If I have this code
local f = io.open("../web/", "r")
print(io.type(f))
-- output: file
how can I know if f
points to a directory?
ANSI C does not specify any way to obtain information on a directory, so vanilla Lua can't tell you that information (because Lua strives for 100% portability). However, you can use an external library such as LuaFileSystem to identify directories.
Progamming in Lua even explicitly states about the missing directory functionality:
As a more complex example, let us write a function that returns the contents of a given directory. Lua does not provide this function in its standard libraries, because ANSI C does not have functions for this job.
That example moves on to show you how to write a dir
function in C yourself.
Lua's default libraries don't have a way to determine this.
However, you could use the third-party LuaFileSystem library to gain access to more advanced file-system interactions; it's cross-platform as well.
if you do
local x,err=f:read(1)
then you'll get "Is a directory"
in err
.
I've found this piece of code inside a library I use:
local ok, err, code = f:read("*a")
f:close()
if code == 21 then
return true
end
I don't know what the code would be in Windows, but on Linux/BSD/OSX it works fine.