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

6

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

import IO

--.... yadda, yadda, yadda

  file <- openFile "/some/path" ReadMode

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


3
顺便提一句,不再使用 IO 模块,该模块已过时。请改用 System.IO 模块。 - fuz
1个回答

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可能抛出的异常类型在此处列出,包括:

  • 如果文件已经打开且无法重新打开,则会抛出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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接