2

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

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

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

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

4

1 回答 1

6

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

计算hGetContents hdl返回对应于 hdl 管理的通道或文件的未读部分的字符列表,将其置于中间状态,半关闭。在这种状态下,hdl 实际上是关闭的,但项目会根据需要从 hdl 中读取并累积在由hGetContents hdl.

于 2013-05-16T02:18:12.790 回答