2013-06-28 59 views
5

the System.Directory haddockrenameFile可能会因多种原因:发生哈斯克尔:捕低级IO异常

  • 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]
  • 不适当的类型任一路径都是指现有目录。 [ENOTDIR,EISDIR,EINVAL,EEXIST,ENOTEMPTY]

一对夫妇这些(isPermissionError,isDoesNotExistError)的似乎已经测试功能,但其他人(包括UnsupportedOperation,其中我感兴趣)不符合任何东西。什么是UnsupportedOperation,我该如何测试它?

更一般地说,我该如何去了解这是什么东西。我无法在源代码中看到它引发的任何地方,所以我猜这是围绕较低级别错误的包装 - 但我应该如何处理这些问题?

回答

5

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 
+0

劳驾给个例子吗?我正在尝试'IOError _ UnsupportedOperation _ _ __ - >只是x',但得到关于不导出IOError/IOException的投诉。 – Impredicative

+0

我不确定你的模式匹配有什么问题,它对我来说看起来不错。我添加了完整的例子,为我编译和工作。 – Yuras

+0

哈!做一个不合格的进口完全没有发生在我身上!谢谢! – Impredicative