好吧,伙计们, 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/