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

标签 exception haskell file-io io monads

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

import IO

--.... yadda, yadda, yadda

  file <- openFile "/some/path" ReadMode

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

最佳答案

如果文件不存在,或者发生其他错误,对 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)

关于exception - Haskell - 检查文件句柄的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886705/

相关文章:

ruby - 我如何确定文件已写入?

javascript - 适当的非字符串 Javascript 异常

haskell - 在二叉树haskell中搜索一个值

java - 检索方法应该返回 'null' 还是在无法生成返回值时抛出异常?

Raku 中的类似 Haskell 的模式匹配

selenium - 围绕 do block 的 haskell "withSubprocess"构造

java - 加密/解密文件。 ASCII +1 用于加密/解密

java - 在Java中将文本文件读入char数组

java - 迭代 Long 列表会导致 java.lang.ClassCastException

ios - 应用程序在 iOS 5.0 模拟器中崩溃,但在 iOS 6.0 中不会崩溃