【问题标题】:Haskell - Checking the Validity of a File HandleHaskell - 检查文件句柄的有效性
【发布时间】:2011-08-18 16:56:43
【问题描述】:

好的,伙计们,超级简单的问题(Google 没有帮助我解决这个问题似乎很奇怪):

import IO

--.... yadda, yadda, yadda

  file <- openFile "/some/path" ReadMode

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

【问题讨论】:

  • 顺便说一句,不要再使用模块IO,它已被弃用。请改用System.IO

标签: exception haskell file-io io monads


【解决方案1】:

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

例如:

import System.IO

main = do
   openFile "/some/path" ReadMode

失败:

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

openFileare 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)

【讨论】:

    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多