Haskell ReadWriteMode文件句柄

时间:2015-07-18 20:15:10

标签: haskell io

在阅读了解你的Haskell 时,我发现你可以使用 ReadWriteMode 作为openFile的第三个参数。

但这是否应该处理文件的写入和读取? 我做了一些测试:

import System.IO

main = do
    handle   <- openFile "myfile" ReadWriteMode
    contents <- hGetContents handle
    putStrLn contents
    hPutStr handle "Something"
    hClose handle

然而,这返回了一个错误:

*** Exception: myfile: hPutStr: illegal operation (handle is closed)

那么, ReadWriteMode 有什么意义呢?我正在寻找可以使用它的任何现实世界的案例。

1 个答案:

答案 0 :(得分:0)

这似乎有用。

import System.IO
import qualified System.IO.Strict as SIO
import GHC.IO.Handle

slurp h = do
  h' <- hDuplicate h
  hSeek h' AbsoluteSeek 0
  SIO.hGetContents h'

main = do
    handle   <- openFile "myfile" ReadWriteMode
    contents <- slurp handle
    putStrLn contents
    offset <- hTell handle
    putStrLn $ "handle position: " ++ show offset
    hPutStrLn handle "Something new"
    hClose handle

System.IO.Strict来自strict package

修改:您甚至可能不需要使用SIO.hGetContents - 只是普通hGetContents似乎也有用。