【问题标题】:haskell hFlush isn't working the way Im expectinghaskell hFlush 没有按我预期的方式工作
【发布时间】:2013-05-16 02:01:32
【问题描述】:

我正在尝试让一个程序使用 hFlush 读取整个文件,以避免我遇到的与惰性 IO 相关的问题。

readHandle <- openFile fileName ReadMode
hSetBuffering readHandle $ BlockBuffering (Just 2048)
fileText <- hGetContents readHandle
hFlush readHandle
hClose readHandle

这只是给了我错误:hFlush: 非法操作(句柄已关闭)

有人可以帮我了解发生了什么

【问题讨论】:

  • 另外,hFlush 刷新 输出 缓冲区。首先在只读句柄上使用它没有任何意义。
  • 我推荐使用 hGetContents from System.IO.Strict 并完全避免使用惰性 IO。

标签: haskell io lazy-evaluation


【解决方案1】:

你的期望是错误的。通常,除了显式关闭句柄外,您不应在 hGetContents 调用之后使用句柄。来自黑线鳕:

计算hGetContents hdl返回字符列表 对应于由管理的通道或文件的未读部分 hdl,进入中间状态,半封闭。在这个 状态,hdl 有效关闭,但从 hdl 读取项目 需求并累积在hGetContents hdl返回的特殊列表中。

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2015-11-17
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多