繁体   English   中英

以流方式写入文件并在达到给定 memory 文件大小时停止

[英]Writing into a file in a streaming way and stop when we reach a given memory file size

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

我不认为开箱即用为此提供任何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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM