0

我正在编写一个 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 中可用的其他替代方法?

文件系统对象的参考

4

0 回答 0