根据the System.Directory haddockrenameFile可能由于多种原因而失败:

  • HardwareFault发生物理I/O错误。 [EIO]
  • InvalidArgument这两个操作数都不是有效的文件名。 [ENAMETOOLONG,ELOOP]
  • isDoesNotExistError/NoSuchThing原始文件不存在,或者没有指向目标的路径。 [ENOENT,ENOTDIR]
  • isPermissionError/PermissionDenied该进程没有足够的特权来执行该操作。 [EROFS,EACCES,EPERM]
  • ResourceExhausted可用资源不足,无法执行操作。 [EDQUOT,ENOSPC,ENOMEM,EMLINK]
  • UnsatisfiedConstraints不满足与实现相关的约束。 [EBUSY]
  • UnsupportedOperation在这种情况下,实现不支持重命名。 [EXDEV]
  • InappropriateType路径均指向现有目录。 [ENOTDIR,EISDIR,EINVAL,EEXIST,ENOTEMPTY]

  • 其中的几个(isPermissionError,isDoesNotExistError)具有测试功能,但其他功能(包括我感兴趣的UnsupportedOperation)似乎与任何功能都不对应。什么是UnsupportedOperation,我该如何对其进行测试?

    更笼统地说,我应该如何找出类似的东西。我在源代码中的任何地方都看不到它的出现,因此我猜想它是一个围绕较低级别错误的包装器-但是我应该如何处理呢?

    最佳答案

    UnsupportedOperationghc-specific。因此,您必须导入GHC.IO.Exception,它包含检查异常类型所需的所有内容。

    这是一个例子:

    import Control.Exception
    import GHC.IO.Exception
    
    main :: IO ()
    main = do
      action `catch` (\(IOError _ UnsupportedOperation _ _ _ _) -> print "UnsupportedOperation")
      where
      action = throw $ IOError Nothing UnsupportedOperation "loc" "desc" Nothing Nothing
    

    09-25 22:17