我正在尝试使用hFlush来读取整个文件的程序,以避免我遇到的与懒惰IO有关的问题。
readHandle <- openFile fileName ReadMode
hSetBuffering readHandle $ BlockBuffering (Just 2048)
fileText <- hGetContents readHandle
hFlush readHandle
hClose readHandle
这只是给我错误:hFlush:非法操作(句柄关闭)
有人可以帮助我了解正在发生的事情
答案 0 :(得分:6)
你的期望是错误的。通常,除了明确关闭句柄之外,在hGetContents
调用后,您不应使用句柄。来自黑线鳕:
计算
hGetContents hdl
返回字符列表 对应于由其管理的频道或文件的未读部分 hdl,处于中间状态,半封闭。在这 state,hdl实际上是关闭的,但是项目是从hdl上读取的 需求并累积在hGetContents hdl
返回的特殊列表中。