Подумайте над тем, чтобы позвонить на распаковать .Это не супер, но это делает работу.Возможно, все ненавистники должны тратить больше времени на исправление или замену поврежденных библиотек, таких как zip-архив и меньше времени на стекпотоки.
Стандартный отказ от ответственности: проверка ошибок отсутствует.это может привести к утечке ручек.ленивый ввод-вывод ленивый.
import System.Environment (getArgs)
import System.IO (hSetBinaryMode)
import System.Process (StdStream(...), createProcess, proc, close_fds, std_out)
import qualified Data.ByteString.Lazy as L
unzipLBS :: FilePath -> IO L.ByteString
unzipLBS file = do
let args = proc "unzip" ["-p", file]
args' = args { std_out = CreatePipe, close_fds = True }
(_, Just hOut, _, _) <- createProcess args'
hSetBinaryMode hOut True
L.hGetContents hOut
main :: IO ()
main = do
f:_ <- getArgs
print . L.take 5 =<< unzipLBS f
Кажется, работает:
$ runghc -Wall unzip.hs ~/Downloads/test.zip
Chunk ",+\227F\149" Empty