Lua检查文件是否存在

我如何使用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 

但是请注意,这段代码只testing文件是否可以打开阅读。

使用简单的Lua,你可以做的最好的方式是看看是否可以打开一个文件读取,如每个LHF。 这几乎总是够好的。 但是,如果你想要更多,加载Lua POSIX库,并检查posix.stat( path )返回非零。

我会从这里引用自己

我使用这些(但我真的检查错误):

 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 

os.rename(name1,name2)会将name1重命名为name2。 使用相同的名称,没有什么应该改变(除了有一个坏蛋的错误)。 如果一切顺利,返回true,否则返回nil和errormessage。 如果你不想使用lfs你不能试图打开文件(这是有点慢,但确定)不区分文件和目录。

所以没有LuaFileSystem

 -- 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 

它看起来更短,但需要更长时间…同时打开一个文件是有风险的

玩得开心编码!

为了完整:你也可以用path.exists(filename)试试你的运气。 我不确定哪个Lua发行版实际上有这个path命名空间( 更新 : Penlight ),但至less它包含在Torch中:

 $ th ______ __ | Torch7 /_ __/__ ________/ / | Scientific computing for Lua. / / / _ \/ __/ __/ _ \ | Type ? for help /_/ \___/_/ \__/_//_/ | https://github.com/torch | http://torch.ch th> path.exists(".gitignore") .gitignore th> path.exists("non-existing") false 

debug.getinfo(path.exists)告诉我它的源代码在torch/install/share/lua/5.1/pl/path.lua ,它的实现方式如下:

 --- does a path exist?. -- @string PA file path -- @return the file path if it exists, nil otherwise function path.exists(P) assert_string(1,P) return attrib(P,'mode') ~= nil and P end 

如果你愿意使用lfs ,你可以使用lfs.attributes 。 如果发生错误,它将返回nil

 require "lfs" if lfs.attributes("non-existing-file") then print("File exists") else print("Could not get attributes") end 

尽pipe除了不存在的文件之外,它可以返回nil作为其他错误,但是如果它不返回nil ,那么文件肯定存在。

你也可以使用'path'包。 这是包的链接

然后在Lua做:

 require 'paths' if paths.filep('your_desired_file_path') then print 'it exists' else print 'it does not exist' end 

一个答案是Windows只检查文件和文件夹,也不需要额外的软件包。 它返回truefalse

 io.popen("if exist "..PathToFileOrFolder.." (echo 1)"):read'*l'=='1' 

io.popen(…):读取“* l” – 在命令提示符下执行一个命令并从CMD stdout读取结果

如果存在 – CMD命令来检查一个对象是否存在

(echo 1) – 将1打印到命令提示符的标准输出

 IsFile = function(path) print(io.open(path or '','r')~=nil and 'File exists' or 'No file exists on this path: '..(path=='' and 'empty path entered!' or (path or 'arg "path" wasn\'t define to function call!'))) end IsFile() IsFile('') IsFIle('C:/Users/testuser/testfile.txt') 

看起来不错,testing你的方式。 🙂