如何检查lua中是否存在目录,如果可能,最好不使用LuaFileSystem模块?
试图做这样的python线:
os.path.isdir(path)
RBerteig.. 12
问题是库存Lua分布(几乎)只包括标准C中指定的功能.标准C没有假设实际存在任何特定类型的文件系统(甚至操作系统,就此而言) ,因此os
和io
模块不提供标准C库中没有的访问信息.
如果您尝试使用纯标准C进行编码,则会遇到相同的问题.
您可以通过尝试使用该文件夹来了解该文件夹是否存在.如果您希望它存在并且可以写入,则在那里创建一个临时文件,如果成功,则该文件夹存在.如果失败,您当然可能无法将不存在的文件夹与权限不足区分开来.
到目前为止,获得特定答案的最轻量级答案将是对仅提供所需信息的特定于操作系统的函数调用的精简绑定.如果你可以接受lua外星人模块,那么你可以喜欢在其他纯粹的Lua中进行绑定.
更简单但更重一点的是接受Lua文件系统.它提供了一个便携式模块,支持大多数人可能想要了解的文件和文件系统.
问题是库存Lua分布(几乎)只包括标准C中指定的功能.标准C没有假设实际存在任何特定类型的文件系统(甚至操作系统,就此而言) ,因此os
和io
模块不提供标准C库中没有的访问信息.
如果您尝试使用纯标准C进行编码,则会遇到相同的问题.
您可以通过尝试使用该文件夹来了解该文件夹是否存在.如果您希望它存在并且可以写入,则在那里创建一个临时文件,如果成功,则该文件夹存在.如果失败,您当然可能无法将不存在的文件夹与权限不足区分开来.
到目前为止,获得特定答案的最轻量级答案将是对仅提供所需信息的特定于操作系统的函数调用的精简绑定.如果你可以接受lua外星人模块,那么你可以喜欢在其他纯粹的Lua中进行绑定.
更简单但更重一点的是接受Lua文件系统.它提供了一个便携式模块,支持大多数人可能想要了解的文件和文件系统.
这种方法适用于Unix和Windows,没有任何外部依赖:
--- Check if a file or directory exists in this path function exists(file) local ok, err, code = os.rename(file, file) if not ok then if code == 13 then -- Permission denied, but it exists return true end end return ok, err end --- Check if a directory exists in this path function isdir(path) -- "/" works on both Unix and Windows return exists(path.."/") end
如果您对避免LFS库特别感兴趣,Lua Posix库有一个stat()接口.
require 'posix' function isdir(fn) return (posix.stat(fn, "type") == 'directory') end
好吧,5.1参考手册在os表中没有任何内容,但是如果你使用Nixstaller,你可以得到os.fileexists
你所解释的内容.
如果你有能力摆弄一下,或者如果你知道你将运行什么操作系统,你可能会os.execute
通过一些系统调用来获取标准的os库,以确定文件是否存在.
甚至比os.execute更好的可能是os.rename:
os.rename(oldname, newname)
重命名命名的文件
oldname
来newname
.如果此函数失败,则返回nil,并返回描述错误的字符串.
您可以尝试将oldname和newname设置为相同 - 但您可能没有写入权限,因此即使您可以阅读,也可能因为无法写入而失败.在那种情况下,您必须解析返回的错误字符串并推断您是否可以编写,或者您只需要尝试执行需要现有文件的函数,并将其包装在pcall
.