0

假设我想将一个流保存MyItem到一个文件中(例如在 JSON 中)。当文件达到一定的字节大小限制时,我想停止。我想在 Haskell 中做...流对我来说不是问题,更重要的是如何在将每个项目放入此文件后获取文件大小信息...

4

1 回答 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 回答