LibZip-0.1.0: examples/legacyUnzip.hs
-- A simple unzip utility.
--
-- This is an example of using legacy LibZip-0.0 API.
--
module Main where
import qualified Data.ByteString as B
import Control.Monad (forM_,when)
import System.Directory (createDirectoryIfMissing)
import System.Environment (getArgs)
import System.FilePath (takeDirectory)
import Codec.Archive.LibZip
usage = "unzip [-l] file.zip [files]"
main = do
args <- getArgs
let onlyList = "-l" `elem` args
let args' = filter (/= "-l") args
case args' of
[] -> putStrLn usage
(filename:files) -> do
catchZipError $
withZip filename [] $ \z -> do
files' <- getFiles z []
forM_ files' $ \f -> do
when (f `elem` files || null files) $
if onlyList
then putStrLn f
else saveFile f =<< readZipFile z f []
$ \e -> putStrLn $ "Error in " ++ filename ++ ": " ++ show e
saveFile f contents = do
if isDir f
then createDirectoryIfMissing True $ takeDirectory f
else B.writeFile f contents