2011-05-04 13 views
6

Ok, chicos, muy fácil de interrogación (parece raro que Google no me ayuda con éste):Haskell - Comprobación de la validez de un identificador de archivo

import IO 

--.... yadda, yadda, yadda 

    file <- openFile "/some/path" ReadMode 

¿Cómo puedo comprobar si el mango que se Obtuve de openFile es un identificador válido, es decir, que el archivo existe y se abrió con éxito?

+3

Por cierto, no utilizan el módulo 'IO' más, que está en desuso. Use 'System.IO' en su lugar. – fuz

Respuesta

8

Si el archivo no existe o se produce algún otro error, la llamada a openFile fallará con una excepción.

Por ejemplo:

import System.IO 

main = do 
    openFile "/some/path" ReadMode 

error con:

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

Los tipos de excepciones que pueden ser lanzados por openFileare listed here, e incluyen:

  • isAlreadyInUseError si el archivo ya está abierto y no puede ser reabierto;
  • isDoesNotExistError si el archivo no existe; o
  • isPermissionError si el usuario no tiene permiso para abrir el archivo.

Usted puede coger estos errores utilizando Control.Exception, así:

{-# 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) 
+0

¡Gracias por la respuesta! –

Cuestiones relacionadas