zip-archive-0.2.3.7: Library for creating and modifying zip archives.

Copyright | John MacFarlane
License | BSD3
Maintainer | John MacFarlane < jgm at berkeley dot edu >
Stability | unstable
Portability | so far only tested on GHC
Safe Haskell | None
Language | Haskell98

Codec.Archive.Zip

Contents

- Data structures
- Pure functions for working with zip archives
- IO functions for working with zip archives

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 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 Archive = Archive {
  - zEntries :: [Entry]
  - zSignature :: Maybe ByteString
  - zComment :: ByteString
  }
- data Entry = Entry {
  - eRelativePath :: FilePath
  - eCompressionMethod :: CompressionMethod
  - eLastModified :: Integer
  - eCRC32 :: Word32
  - eCompressedSize :: Word32
  - eUncompressedSize :: Word32
  - eExtraField :: ByteString
  - eFileComment :: ByteString
  - eInternalFileAttributes :: Word16
  - eExternalFileAttributes :: Word32
  - eCompressedData :: ByteString
  }
- data CompressionMethod
  - = Deflate
  - | NoCompression
- data ZipOption
  - = OptRecursive
  - | OptVerbose
  - | OptDestination FilePath
  - | OptLocation FilePath Bool
- emptyArchive :: Archive
- toArchive :: ByteString -> Archive
- toArchiveOrFail :: ByteString -> Either String Archive
- fromArchive :: Archive -> ByteString
- filesInArchive :: Archive -> [FilePath]
- addEntryToArchive :: Entry -> Archive -> Archive
- deleteEntryFromArchive :: FilePath -> Archive -> Archive
- findEntryByPath :: FilePath -> Archive -> Maybe Entry
- fromEntry :: Entry -> ByteString
- toEntry :: FilePath -> Integer -> ByteString -> Entry
- readEntry :: [ZipOption] -> FilePath -> IO Entry
- writeEntry :: [ZipOption] -> Entry -> IO ()
- addFilesToArchive :: [ZipOption] -> Archive -> [FilePath] -> IO Archive
- extractFilesFromArchive :: [ZipOption] -> Archive -> IO ()

# Data structures

data Archive Source

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

Constructors

Archive |

Fields

zEntries :: [Entry]

  Files in zip archive

zSignature :: Maybe ByteString

  Digital signature

zComment :: ByteString

  Comment for whole zip archive

Instances

Read Archive Source |
Show Archive Source |
Binary Archive Source |

data Entry Source

Representation of an archived file, including content and metadata.

Constructors

Entry |

Fields

eRelativePath :: FilePath

  Relative path, using `/` as separator

eCompressionMethod :: CompressionMethod

  Compression method

eLastModified :: Integer

  Modification time (seconds since unix epoch)

eCRC32 :: Word32

  CRC32 checksum

eCompressedSize :: Word32

  Compressed size in bytes

eUncompressedSize :: Word32

  Uncompressed size in bytes

eExtraField :: ByteString

  Extra field - unused by this library

eFileComment :: ByteString

  File comment - unused by this library

eInternalFileAttributes :: Word16

  Internal file attributes - unused by this library

eExternalFileAttributes :: Word32

  External file attributes (system-dependent)

eCompressedData :: ByteString

  Compressed contents of file

Instances

Eq Entry Source |
Read Entry Source |
Show Entry Source |

data CompressionMethod Source

Compression methods.

Constructors

Deflate |
NoCompression |

Instances

Eq CompressionMethod Source |
Read CompressionMethod Source |
Show CompressionMethod Source |

data ZipOption Source

Options for `addFilesToArchive` and `extractFilesFromArchive`.

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

Instances

Eq ZipOption Source |
Read ZipOption Source |
Show ZipOption Source |

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.

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.

# 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.

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 `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.