
Bryan,
I downloaded your FileManip library and Duncan's zlib library, but I
kept getting a "Too many open files" exception (it matches over 9000
files). I tried to get around this using unsafeInterleaveIO as Greg
had suggested, so now I have this:
foo = namesMatching "*/*.z" >>=
fmap B.concat . mapM (unsafeInterleaveIO . fmap decompress . B.readFile)
Now it doesn't complain about too many open files, but instead I get
this runtime error:
LPS *** Exception: user error (Codec.Compression.Zlib: incorrect header check)
I tried to get the same error on simpler code, and I've found this
gives the same error:
bar = fmap decompress $ L.readFile "myData.z"
It seemed to me the file might be corrupted, but I can do
gunzip -c "myData.gz"
at the command line and see the results just fine.
I also tried gzipping a different, smaller file, and I changed the
string in "bar" accordingly. No error in that case. So it seems to be
a problem with myData.z, but why would it gunzip from the command line
with no trouble in that case?
Thanks,
Chad
On 6/24/07, Bryan O'Sullivan
Using my FileManip library, you'd do that like this.
import Codec.Compression.GZip import qualified Data.ByteString.Lazy as B import System.FilePath.Glob
foo :: IO B.ByteString foo = namesMatching "*/*.gz" >>= fmap B.concat . mapM (fmap decompress . B.readFile)
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/FileManip-0.2