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只检查文件和文件夹,也不需要额外的软件包。 它返回true
或false
。
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你的方式。 🙂