Haskell - Проверка правильности дескриптора файла - PullRequest
6 голосов
/ 04 мая 2011

Хорошо, ребята, очень простой вопрос (кажется странным, что Google не помог мне с этим):

import IO

--.... yadda, yadda, yadda

  file <- openFile "/some/path" ReadMode

Как проверить, является ли дескриптор, который я получил от openFile, допустимым дескриптором, т. Е. Что файл существует и был успешно открыт?

1 Ответ

8 голосов
/ 04 мая 2011

Если файл не существует или возникает какая-либо другая ошибка, вызов 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)
...