2011-05-04 4 views
6

좋아, 얘들 아, 아주 쉽게 문제를 처리 확인 (구글이 하나 나에게 도움이되지 않았다 이상한 것 같다) :하스켈 - 파일의 유효 기간이

import IO 

--.... yadda, yadda, yadda 

    file <- openFile "/some/path" ReadMode 

내가 핸들 있는지 확인하려면 어떻게 그 나는 openFile에서 유효한 핸들입니다, 즉 파일이 존재하고 성공적으로 열렸습니까?

+3

이 모듈'IO' 더 이상, 그것은 사용되지 않습니다를 사용하지 마십시오. 대신에'System.IO'를 사용하십시오. – fuz

답변

8

파일이 없거나 다른 오류가 발생하면 openFile에 대한 호출이 실패하고 예외가 발생합니다. 예를 들어

: 파일이 이미

  • isAlreadyInUseError 경우 : openFileare listed here, 의해 던져 포함 할 수있다 예외

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

    유형 :

    import System.IO 
    
    main = do 
        openFile "/some/path" ReadMode 
    

    는 실패 열어 다시 열 수 없다.

  • 파일이 존재하지 않으면 isDoesNotExistError. 또는
  • 사용자가 파일을 열 수있는 권한이 없으면 isPermissionError입니다.

당신과 같이, Control.Exception를 사용하여 이러한 오류를 잡을 수 :

BTW
{-# 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

답변 해 주셔서 감사합니다! –