[1050] | 1 | /** \page usage Usage
|
---|
| 2 | *
|
---|
| 3 | * This page provides general information on QuaZIP usage. See classes
|
---|
| 4 | * QuaZip and QuaZipFile for the detailed documentation on what can
|
---|
| 5 | * QuaZIP do and what it can not. Also, reading comments in the zip.h and
|
---|
| 6 | * unzip.h files (taken from the original ZIP/UNZIP package) is always a
|
---|
| 7 | * good idea too. After all, QuaZIP is just a wrapper with a few
|
---|
| 8 | * convenience extensions and reimplementations.
|
---|
| 9 | *
|
---|
| 10 | * QuaZip is a class representing ZIP archive, QuaZipFile represents a
|
---|
| 11 | * file inside archive and subclasses QIODevice as well. One limitation
|
---|
| 12 | * is that there can be only one instance of QuaZipFile per QuaZip
|
---|
| 13 | * instance, which kind of makes it confusing why there are two classes
|
---|
| 14 | * instead of one. This is actually no more than an API design mistake.
|
---|
| 15 | *
|
---|
| 16 | * \section terminology Terminology
|
---|
| 17 | *
|
---|
| 18 | * "QuaZIP" means whole this library, while "QuaZip" (note the
|
---|
| 19 | * lower case) is just one class in it.
|
---|
| 20 | *
|
---|
| 21 | * "ZIP/UNZIP API" or "minizip" means the original API of the Gilles
|
---|
| 22 | * Vollant's ZIP/UNZIP package. It was slightly modified to better
|
---|
| 23 | * integrate with Qt. These modifications are not source or binary
|
---|
| 24 | * compatible with the official minizip release, which means you can't
|
---|
| 25 | * just drop the newer minizip version into QuaZIP sources and make it
|
---|
| 26 | * work.
|
---|
| 27 | *
|
---|
| 28 | * "ZIP", "ZIP archive" or "ZIP file" means any ZIP archive. Typically
|
---|
| 29 | * this is a plain file with ".zip" (or ".ZIP") file name suffix, but it
|
---|
| 30 | * can also be any seekable QIODevice (say, QBuffer, but not
|
---|
| 31 | * QTcpSocket).
|
---|
| 32 | *
|
---|
| 33 | * "A file inside archive", "a file inside ZIP" or something like that
|
---|
| 34 | * means file either being read or written from/to some ZIP archive.
|
---|
| 35 | *
|
---|
| 36 | * \section error-handling Error handling
|
---|
| 37 | *
|
---|
| 38 | * Almost any call to ZIP/UNZIP API return some error code. Most of the
|
---|
| 39 | * original API's error checking could be done in this wrapper as well,
|
---|
| 40 | * but it would cause unnecessary code bloating without any benefit. So,
|
---|
| 41 | * QuaZIP only checks for situations that ZIP/UNZIP API can not check
|
---|
| 42 | * for. For example, ZIP/UNZIP API has no "ZIP open mode" concept
|
---|
| 43 | * because read and write modes are completely separated. On the other
|
---|
| 44 | * hand, to avoid creating classes like "QuaZipReader", "QuaZipWriter"
|
---|
| 45 | * or something like that, QuaZIP introduces "ZIP open mode" concept
|
---|
| 46 | * instead, thus making it possible to use one class (QuaZip) for both
|
---|
| 47 | * reading and writing. But this leads to additional open mode checks
|
---|
| 48 | * which are not done in ZIP/UNZIP package.
|
---|
| 49 | *
|
---|
| 50 | * Therefore, error checking is two-level (QuaZIP's level and ZIP/UNZIP
|
---|
| 51 | * API level), which sometimes can be confusing, so here are some
|
---|
| 52 | * advices on how the error checking should be properly done:
|
---|
| 53 | *
|
---|
| 54 | * - Both QuaZip and QuaZipFile have getZipError() function, which return
|
---|
| 55 | * error code of the last ZIP/UNZIP API call. Most function calls
|
---|
| 56 | * reset error code to UNZ_OK on success and set error code on
|
---|
| 57 | * failure. Some functions do not reset error code. Most of them are
|
---|
| 58 | * \c const and do not access ZIP archive in any way. Some, on the
|
---|
| 59 | * other hand, \em do access ZIP archive, but do not reset or set
|
---|
| 60 | * error code. For example, QuaZipFile::pos() function. Such functions
|
---|
| 61 | * are explicitly marked in the documentation.
|
---|
| 62 | * - Most functions have their own way to report errors, by returning a
|
---|
| 63 | * null string, negative value or \c false. If such a function returns
|
---|
| 64 | * error value, call getZipError() to get more information about
|
---|
| 65 | * error. See "zip.h" and "unzip.h" of the ZIP/UNZIP package for error
|
---|
| 66 | * codes.
|
---|
| 67 | * - If the function returns error-stating value (like \c false), but
|
---|
| 68 | * getZipError() returns UNZ_OK, it means that you did something
|
---|
| 69 | * obviously wrong. For example, tried to write in the archive open
|
---|
| 70 | * for reading or not open at all. You better just not do that!
|
---|
| 71 | * Most functions also issue a warning using qWarning() function in
|
---|
| 72 | * such cases. See documentation for a specific function for details
|
---|
| 73 | * on when it should not be called.
|
---|
| 74 | *
|
---|
| 75 | * I know that this is somewhat messy, but I could not find a better way
|
---|
| 76 | * to do all the error handling.
|
---|
| 77 | **/
|
---|