Haskell - 检查文件句柄的有效性

时间:2011-05-04 16:30:58

标签: exception haskell file-io io monads

好的,伙计们,这是一个非常简单的问题(谷歌没有帮我解决这个问题似乎很奇怪):

import IO

--.... yadda, yadda, yadda

  file <- openFile "/some/path" ReadMode

如何检查从openFile获取的句柄是否是有效句柄,即该文件是否存在且是否已成功打开?

1 个答案:

答案 0 :(得分:8)

如果该文件不存在或发生其他错误,则对openFile的调用将失败并出现异常。

例如:

import System.IO

main = do
   openFile "/some/path" ReadMode

失败:

A.hs: /some/path: openFile: does not exist (No such file or directory)

openFile are listed here,可能抛出的异常类型,包括:

    如果文件已经打开且无法重新打开,则
  • isAlreadyInUseError;
  • 如果文件不存在,则
  • isDoesNotExistError;或
  • 如果用户没有打开文件的权限,则
  • isPermissionError。

您可以使用Control.Exception来捕获这些错误,如下所示:

{-# LANGUAGE ScopedTypeVariables #-}

import System.IO
import Control.Exception

main = do
    handle (\(e :: IOException) -> print e >> return Nothing) $ do
      h <- openFile "/some/path" ReadMode
      return (Just h)