相关疑难解决方法(0)

Haskell Lazy ByteString +读/写进度函数

我正在学习Haskell Lazy IO.

我正在寻找一种优雅的方式来复制大文件(8Gb),同时将复制进度打印到控制台.

请考虑以下以静默方式复制文件的简单程序.

module Main where

import System
import qualified Data.ByteString.Lazy as B

main = do [from, to] <- getArgs
          body <- B.readFile from
          B.writeFile to body
Run Code Online (Sandbox Code Playgroud)

Imgine有一个你想用于报告的回调函数:

onReadBytes :: Integer -> IO ()
onReadBytes count = putStrLn $ "Bytes read: " ++ (show count)
Run Code Online (Sandbox Code Playgroud)

问题:如何将onReadBytes函数编织到Lazy ByteString中,以便在成功读取时调用它?或者如果这个设计不好,那么Haskell的做法是什么?

注意:回调的频率并不重要,可以每1024字节或每1Mb调用一次 - 不重要

答案:非常感谢camccann的答案.我建议完全阅读.

Bellow是基于camccann代码的代码版本,您可能会发现它很有用.

module Main where

import System
import System.IO
import qualified Data.ByteString.Lazy as B

main = do [from, to] <- getArgs
          withFile from ReadMode $ …
Run Code Online (Sandbox Code Playgroud)

io haskell progress lazy-evaluation bytestring

20
推荐指数
1
解决办法
3014
查看次数

标签 统计

bytestring ×1

haskell ×1

io ×1

lazy-evaluation ×1

progress ×1