簡體   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