| 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 |
**/ |