zip-archive-0.4.3: Library for creating and modifying zip archives.
CopyrightJohn MacFarlane
LicenseBSD3
MaintainerJohn MacFarlane < jgm at berkeley dot edu >
Stabilityunstable
Portabilityso far only tested on GHC
Safe HaskellSafe-Inferred
LanguageHaskell98

Codec.Archive.Zip

Description

The zip-archive library provides functions for creating, modifying, and extracting files from zip archives.

Certain simplifying assumptions are made about the zip archives: in particular, there is no support for strong encryption, zip files that span multiple disks, ZIP64, OS-specific file attributes, or compression methods other than Deflate. However, the library should be able to read the most common zip archives, and the archives it produces should be readable by all standard unzip programs.

As an example of the use of the library, a standalone zip archiver and extracter, Zip.hs, is provided in the source distribution.

For more information on the format of zip archives, consult http://www.pkware.com/documents/casestudies/APPNOTE.TXT

Synopsis

Data structures

data Archive Source #

Structured representation of a zip archive, including directory information and contents (in lazy bytestrings).

Constructors

Archive 

Fields

Instances

Instances details
Read Archive Source # 
Instance details

Defined in Codec.Archive.Zip

Show Archive Source # 
Instance details

Defined in Codec.Archive.Zip

Binary Archive Source # 
Instance details

Defined in Codec.Archive.Zip

Methods

put :: Archive -> Put #

get :: Get Archive #

putList :: [Archive] -> Put #

data Entry Source #

Representation of an archived file, including content and metadata.

Constructors

Entry 

Fields

Instances

Instances details
Read Entry Source # 
Instance details

Defined in Codec.Archive.Zip

Show Entry Source # 
Instance details

Defined in Codec.Archive.Zip

Methods

showsPrec :: Int -> Entry -> ShowS #

show :: Entry -> String #

showList :: [Entry] -> ShowS #

Eq Entry Source # 
Instance details

Defined in Codec.Archive.Zip

Methods

(==) :: Entry -> Entry -> Bool #

(/=) :: Entry -> Entry -> Bool #

data EncryptionMethod Source #

Constructors

NoEncryption

Entry is not encrypted

PKWAREEncryption !Word8

Entry is encrypted with the traditional PKWARE encryption

data ZipOption Source #

Constructors

OptRecursive

Recurse into directories when adding files

OptVerbose

Print information to stderr

OptDestination FilePath

Directory in which to extract

OptLocation FilePath !Bool

Where to place file when adding files and whether to append current path

OptPreserveSymbolicLinks

Preserve symbolic links as such. This option is ignored on Windows.

Instances

Instances details
Read ZipOption Source # 
Instance details

Defined in Codec.Archive.Zip

Show ZipOption Source # 
Instance details

Defined in Codec.Archive.Zip

Eq ZipOption Source # 
Instance details

Defined in Codec.Archive.Zip

data ZipException Source #

Instances

Instances details
Data ZipException Source # 
Instance details

Defined in Codec.Archive.Zip

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ZipException -> c ZipException #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ZipException #

toConstr :: ZipException -> Constr #

dataTypeOf :: ZipException -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ZipException) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ZipException) #

gmapT :: (forall b. Data b => b -> b) -> ZipException -> ZipException #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ZipException -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ZipException -> r #

gmapQ :: (forall d. Data d => d -> u) -> ZipException -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ZipException -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ZipException -> m ZipException #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipException -> m ZipException #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipException -> m ZipException #

Exception ZipException Source # 
Instance details

Defined in Codec.Archive.Zip

Show ZipException Source # 
Instance details

Defined in Codec.Archive.Zip

Eq ZipException Source # 
Instance details

Defined in Codec.Archive.Zip

emptyArchive :: Archive Source #

A zip archive with no contents.

Pure functions for working with zip archives

toArchive :: ByteString -> Archive Source #

Reads an Archive structure from a raw zip archive (in a lazy bytestring).

toArchiveOrFail :: ByteString -> Either String Archive Source #

Like toArchive, but returns an Either value instead of raising an error if the archive cannot be decoded. NOTE: This function only works properly when the library is compiled against binary >= 0.7. With earlier versions, it will always return a Right value, raising an error if parsing fails.

fromArchive :: Archive -> ByteString Source #

Writes an Archive structure to a raw zip archive (in a lazy bytestring).

filesInArchive :: Archive -> [FilePath] Source #

Returns a list of files in a zip archive.

addEntryToArchive :: Entry -> Archive -> Archive Source #

Adds an entry to a zip archive, or updates an existing entry.

deleteEntryFromArchive :: FilePath -> Archive -> Archive Source #

Deletes an entry from a zip archive.

findEntryByPath :: FilePath -> Archive -> Maybe Entry Source #

Returns Just the zip entry with the specified path, or Nothing.

fromEntry :: Entry -> ByteString Source #

Returns uncompressed contents of zip entry.

fromEncryptedEntry :: String -> Entry -> Maybe ByteString Source #

Returns decrypted and uncompressed contents of zip entry.

isEncryptedEntry :: Entry -> Bool Source #

Check if an Entry is encrypted

toEntry Source #

Arguments

:: FilePath

File path for entry

-> Integer

Modification time for entry (seconds since unix epoch)

-> ByteString

Contents of entry

-> Entry 

Create an Entry with specified file path, modification time, and contents.

isEntrySymbolicLink :: Entry -> Bool Source #

Check if an Entry represents a symbolic link

symbolicLinkEntryTarget :: Entry -> Maybe FilePath Source #

Get the target of a Entry representing a symbolic link. This might fail if the Entry does not represent a symbolic link

entryCMode :: Entry -> CMode Source #

Get the eExternalFileAttributes of an Entry as a CMode a.k.a. FileMode

IO functions for working with zip archives

readEntry :: [ZipOption] -> FilePath -> IO Entry Source #

Generates a Entry from a file or directory.

writeEntry :: [ZipOption] -> Entry -> IO () Source #

Writes contents of an Entry to a file. Throws a CRC32Mismatch exception if the CRC32 checksum for the entry does not match the uncompressed data.

writeSymbolicLinkEntry :: [ZipOption] -> Entry -> IO () Source #

Write an Entry representing a symbolic link to a file. If the Entry does not represent a symbolic link or the options do not contain OptPreserveSymbolicLinks, this function behaves like writeEntry.

addFilesToArchive :: [ZipOption] -> Archive -> [FilePath] -> IO Archive Source #

Add the specified files to an Archive. If OptRecursive is specified, recursively add files contained in directories. if OptPreserveSymbolicLinks is specified, don't recurse into it. If OptVerbose is specified, print messages to stderr.

extractFilesFromArchive :: [ZipOption] -> Archive -> IO () Source #

Extract all files from an Archive, creating directories as needed. If OptVerbose is specified, print messages to stderr. Note that the last-modified time is set correctly only in POSIX, not in Windows. This function fails if encrypted entries are present