假设我想将一个流保存MyItem到一个文件中(例如在 JSON 中)。当文件达到一定的字节大小限制时,我想停止。我想在 Haskell 中做...流对我来说不是问题,更重要的是如何在将每个项目放入此文件后获取文件大小信息...
1 回答
0
我不认为pipes这是开箱即用的,但很容易编写自己的toHandleBounded.
在每个步骤中,您检查文件大小,如果它小于您循环的限制,则将另一个块写入文件。
toHandleBounded :: MonadIO m => Integer -> Handle -> Consumer' ByteString m ()
toHandleBounded limit hd = do
current <- liftIO $ hTell hd
when (current < limit) $ do
x <- await
liftIO $ hPut hd x
toHandleBounded limit hd
main :: IO ()
main =
withFile "/dev/urandom" ReadMode $ \hIn ->
withFile "out.txt" WriteMode $ \hOut ->
runEffect $ P.fromHandle hIn >-> toHandleBounded (1024 * 500 ) hOut
于 2021-02-22T15:44:14.313 回答