如何测试文件夹是否可以删除

我正在编写一个 Lua 函数,使用 Luacom 在 Windows(7 及以上版本,我无法决定版本)中删除文件夹。文件夹路径以 UTF-8 指定,包含非 ASCII 字符,因此 os.remove、io.whatever、Penlight 和 lfs 都无法使用。到目前为止,我已经使用 Luacom 访问 Windows com 模型编写了以下代码:

function delFolder(sPath, bForce)
  --sPath 是完整指定的文件夹路径
  --bForce 是一个布尔值,表示是否应该
  --删除即使它包含只读文件的文件夹
  require('luacom')
  fso = luacom.CreateObject("Scripting.FileSystemObject")
  --在这里编写代码测试文件夹是否存在,
  --如果不存在,则返回错误
  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
  --返回错误表示无法删除文件夹
end

但是否有更简单的方法,使用 com 模型或 Lua 中其他可用的替代方法?

参考文献FileSystemObject

原文链接 https://stackoverflow.com/questions/71093924

点赞