我正在编写一个 Lua 函数来删除在 Windows 中使用 Luacom 的文件夹(从版本 7 开始,我无法指定版本)。文件夹路径以 UTF-8 指定,并且将包含非 ASCII 字符,因此 os.remove、io.whatever、Penlight 和 lfs 将不起作用。到目前为止,我有(使用 Luacom 访问 Windows com 模型):
function delFolder(sPath, bForce)
--sPath is a fully specified folder path
--bForce is a Boolean indicating whether the folder should be
--deleted even if it contains read-only files
require('luacom')
fso = luacom.CreateObject("Scripting.FileSystemObject")
--code in here to test that the folder exists,
--and return an error if it does not
fso:DeleteFolder(sPath, bForce)
end
我的问题是,如果 bForce = false,并且该文件夹实际上是只读的,则操作会出错。我需要能够测试这种情况并返回错误而不是尝试操作。
一种可能性是操纵 Luacom 错误处理以不因错误而中止,并在操作后测试最后一个错误:
luacom.config.abort_on_error = false
luacom.config.last_error = nil
fso:DeleteFolder(sPath, bForce)
if luacom.config.last_error then
--return error indicating that the folder cannot be deleted
end
但是有没有更简单的方法,使用 com 模型或 Lua 中可用的其他替代方法?
文件系统对象的参考