See [this stackoverflow question](https://stackoverflow.com/questions/4990990/check-if-a-file-exists-with-lua) Some of these use the `lfs` module. Note that [neovim](/editor/nvim) *does* have `lfs`. ```lua require("lfs") -- no function checks for errors. -- you should check for them function isFile(name) if type(name)~="string" then return false end if not isDir(name) then return os.rename(name,name) and true or false -- note that the short evaluation is to -- return false instead of a possible nil end return false end function isFileOrDir(name) if type(name)~="string" then return false end return os.rename(name, name) and true or false end function isDir(name) if type(name)~="string" then return false end local cd = lfs.currentdir() local is = lfs.chdir(name) and true or false lfs.chdir(cd) return is end ``` Without `lfs` ```lua -- no require("lfs") function exists(name) if type(name)~="string" then return false end return os.rename(name,name) and true or false end function isFile(name) if type(name)~="string" then return false end if not exists(name) then return false end local f = io.open(name) if f then f:close() return true end return false end function isDir(name) return (exists(name) and not isFile(name)) end ``` ```lua function file_exists(name) local f=io.open(name,"r") if f~=nil then io.close(f) return true else return false end end ```