gpt4 book ai didi

haskell - 如何捕获解压IOError?

转载 作者:行者123 更新时间:2023-12-02 10:55:13 24 4
gpt4 key购买 nike

我编写此代码片段是为了读取可能被压缩的文件:

import Codec.Compression.GZip
import IO -- using IO.try

read file = do
let f = L.readFile file
let c = fmap decompress $ f

unzipped <- try c

case unzipped of
Right b -> return b
Left _ -> f

它编译得很好,但似乎这不是处理未压缩文件的有效方法。在压缩文件上运行代码效果很好,但未压缩文件会失败并出现异常:

*** Exception: Codec.Compression.Zlib: incorrect header check

知道如何实现这一点吗?

最佳答案

您需要导入Codec.Compression.Zlib.Internal。请特别注意标题为 “Low-level API to get explicit error reports” 的部分。 .

你会想要使用这样的东西(注意未经测试):

import qualified Codec.Compression.Zlib.Internal as Z
import Control.Arrow (right)

decompressWithoutExceptions :: L.ByteString -> Either Z.DecompressError L.ByteString
decompressWithoutExceptions = finalise
. Z.foldDecompressStream cons nil err
. Z.decompressWithErrors Z.gzipFormat Z.defaultDecompressParams
where err errorCode errorString = Left errorCode
nil = Right []
cons chunk = right (chunk :)
finalise = right L.fromChunks

(我假设您已导入符合 L 资格的 Data.ByteString.Lazy。)

关于haskell - 如何捕获解压IOError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com