| 1 |
#ifndef QUAZIP_QUAZIPDIR_H |
| 2 |
#define QUAZIP_QUAZIPDIR_H |
| 3 |
|
| 4 |
/* |
| 5 |
Copyright (C) 2005-2014 Sergey A. Tachenov |
| 6 |
|
| 7 |
This file is part of QuaZIP. |
| 8 |
|
| 9 |
QuaZIP is free software: you can redistribute it and/or modify |
| 10 |
it under the terms of the GNU Lesser General Public License as published by |
| 11 |
the Free Software Foundation, either version 2.1 of the License, or |
| 12 |
(at your option) any later version. |
| 13 |
|
| 14 |
QuaZIP is distributed in the hope that it will be useful, |
| 15 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 17 |
GNU Lesser General Public License for more details. |
| 18 |
|
| 19 |
You should have received a copy of the GNU Lesser General Public License |
| 20 |
along with QuaZIP. If not, see <http://www.gnu.org/licenses/>. |
| 21 |
|
| 22 |
See COPYING file for the full LGPL text. |
| 23 |
|
| 24 |
Original ZIP package is copyrighted by Gilles Vollant and contributors, |
| 25 |
see quazip/(un)zip.h files for details. Basically it's the zlib license. |
| 26 |
*/ |
| 27 |
|
| 28 |
class QuaZipDirPrivate; |
| 29 |
|
| 30 |
#include "quazip.h" |
| 31 |
#include "quazipfileinfo.h" |
| 32 |
#include <QDir> |
| 33 |
#include <QList> |
| 34 |
#include <QSharedDataPointer> |
| 35 |
|
| 36 |
/// Provides ZIP archive navigation. |
| 37 |
/** |
| 38 |
* This class is modelled after QDir, and is designed to provide similar |
| 39 |
* features for ZIP archives. |
| 40 |
* |
| 41 |
* The only significant difference from QDir is that the root path is not |
| 42 |
* '/', but an empty string since that's how the file paths are stored in |
| 43 |
* the archive. However, QuaZipDir understands the paths starting with |
| 44 |
* '/'. It is important in a few places: |
| 45 |
* |
| 46 |
* - In the cd() function. |
| 47 |
* - In the constructor. |
| 48 |
* - In the exists() function. |
| 49 |
* - In the relativePath() function. |
| 50 |
* |
| 51 |
* Note that since ZIP uses '/' on all platforms, the '\' separator is |
| 52 |
* not supported. |
| 53 |
*/ |
| 54 |
class QUAZIP_EXPORT QuaZipDir { |
| 55 |
private: |
| 56 |
QSharedDataPointer<QuaZipDirPrivate> d; |
| 57 |
public: |
| 58 |
/// The copy constructor. |
| 59 |
QuaZipDir(const QuaZipDir &that); |
| 60 |
/// Constructs a QuaZipDir instance pointing to the specified directory. |
| 61 |
/** |
| 62 |
If \a dir is not specified, points to the root of the archive. |
| 63 |
The same happens if the \a dir is "/". |
| 64 |
*/ |
| 65 |
QuaZipDir(QuaZip *zip, const QString &dir = QString()); |
| 66 |
/// Destructor. |
| 67 |
~QuaZipDir(); |
| 68 |
/// The assignment operator. |
| 69 |
bool operator==(const QuaZipDir &that); |
| 70 |
/// operator!= |
| 71 |
/** |
| 72 |
\return \c true if either this and \a that use different QuaZip |
| 73 |
instances or if they point to different directories. |
| 74 |
*/ |
| 75 |
inline bool operator!=(const QuaZipDir &that) {return !operator==(that);} |
| 76 |
/// operator== |
| 77 |
/** |
| 78 |
\return \c true if both this and \a that use the same QuaZip |
| 79 |
instance and point to the same directory. |
| 80 |
*/ |
| 81 |
QuaZipDir& operator=(const QuaZipDir &that); |
| 82 |
/// Returns the name of the entry at the specified position. |
| 83 |
QString operator[](int pos) const; |
| 84 |
/// Returns the current case sensitivity mode. |
| 85 |
QuaZip::CaseSensitivity caseSensitivity() const; |
| 86 |
/// Changes the 'current' directory. |
| 87 |
/** |
| 88 |
* If the path starts with '/', it is interpreted as an absolute |
| 89 |
* path from the root of the archive. Otherwise, it is interpreted |
| 90 |
* as a path relative to the current directory as was set by the |
| 91 |
* previous cd() or the constructor. |
| 92 |
* |
| 93 |
* Note that the subsequent path() call will not return a path |
| 94 |
* starting with '/' in all cases. |
| 95 |
*/ |
| 96 |
bool cd(const QString &dirName); |
| 97 |
/// Goes up. |
| 98 |
bool cdUp(); |
| 99 |
/// Returns the number of entries in the directory. |
| 100 |
uint count() const; |
| 101 |
/// Returns the current directory name. |
| 102 |
/** |
| 103 |
The name doesn't include the path. |
| 104 |
*/ |
| 105 |
QString dirName() const; |
| 106 |
/// Returns the list of the entries in the directory. |
| 107 |
/** |
| 108 |
\param nameFilters The list of file patterns to list, uses the same |
| 109 |
syntax as QDir. |
| 110 |
\param filters The entry type filters, only Files and Dirs are |
| 111 |
accepted. |
| 112 |
\param sort Sorting mode. |
| 113 |
*/ |
| 114 |
QList<QuaZipFileInfo> entryInfoList(const QStringList &nameFilters, |
| 115 |
QDir::Filters filters = QDir::NoFilter, |
| 116 |
QDir::SortFlags sort = QDir::NoSort) const; |
| 117 |
/// Returns the list of the entries in the directory. |
| 118 |
/** |
| 119 |
\overload |
| 120 |
|
| 121 |
The same as entryInfoList(QStringList(), filters, sort). |
| 122 |
*/ |
| 123 |
QList<QuaZipFileInfo> entryInfoList(QDir::Filters filters = QDir::NoFilter, |
| 124 |
QDir::SortFlags sort = QDir::NoSort) const; |
| 125 |
/// Returns the list of the entries in the directory with zip64 support. |
| 126 |
/** |
| 127 |
\param nameFilters The list of file patterns to list, uses the same |
| 128 |
syntax as QDir. |
| 129 |
\param filters The entry type filters, only Files and Dirs are |
| 130 |
accepted. |
| 131 |
\param sort Sorting mode. |
| 132 |
*/ |
| 133 |
QList<QuaZipFileInfo64> entryInfoList64(const QStringList &nameFilters, |
| 134 |
QDir::Filters filters = QDir::NoFilter, |
| 135 |
QDir::SortFlags sort = QDir::NoSort) const; |
| 136 |
/// Returns the list of the entries in the directory with zip64 support. |
| 137 |
/** |
| 138 |
\overload |
| 139 |
|
| 140 |
The same as entryInfoList64(QStringList(), filters, sort). |
| 141 |
*/ |
| 142 |
QList<QuaZipFileInfo64> entryInfoList64(QDir::Filters filters = QDir::NoFilter, |
| 143 |
QDir::SortFlags sort = QDir::NoSort) const; |
| 144 |
/// Returns the list of the entry names in the directory. |
| 145 |
/** |
| 146 |
The same as entryInfoList(nameFilters, filters, sort), but only |
| 147 |
returns entry names. |
| 148 |
*/ |
| 149 |
QStringList entryList(const QStringList &nameFilters, |
| 150 |
QDir::Filters filters = QDir::NoFilter, |
| 151 |
QDir::SortFlags sort = QDir::NoSort) const; |
| 152 |
/// Returns the list of the entry names in the directory. |
| 153 |
/** |
| 154 |
\overload |
| 155 |
|
| 156 |
The same as entryList(QStringList(), filters, sort). |
| 157 |
*/ |
| 158 |
QStringList entryList(QDir::Filters filters = QDir::NoFilter, |
| 159 |
QDir::SortFlags sort = QDir::NoSort) const; |
| 160 |
/// Returns \c true if the entry with the specified name exists. |
| 161 |
/** |
| 162 |
The ".." is considered to exist if the current directory |
| 163 |
is not root. The "." and "/" are considered to |
| 164 |
always exist. Paths starting with "/" are relative to |
| 165 |
the archive root, other paths are relative to the current dir. |
| 166 |
*/ |
| 167 |
bool exists(const QString &fileName) const; |
| 168 |
/// Return \c true if the directory pointed by this QuaZipDir exists. |
| 169 |
bool exists() const; |
| 170 |
/// Returns the full path to the specified file. |
| 171 |
/** |
| 172 |
Doesn't check if the file actually exists. |
| 173 |
*/ |
| 174 |
QString filePath(const QString &fileName) const; |
| 175 |
/// Returns the default filter. |
| 176 |
QDir::Filters filter(); |
| 177 |
/// Returns if the QuaZipDir points to the root of the archive. |
| 178 |
/** |
| 179 |
Not that the root path is the empty string, not '/'. |
| 180 |
*/ |
| 181 |
bool isRoot() const; |
| 182 |
/// Return the default name filter. |
| 183 |
QStringList nameFilters() const; |
| 184 |
/// Returns the path to the current dir. |
| 185 |
/** |
| 186 |
The path never starts with '/', and the root path is an empty |
| 187 |
string. |
| 188 |
*/ |
| 189 |
QString path() const; |
| 190 |
/// Returns the path to the specified file relative to the current dir. |
| 191 |
/** |
| 192 |
* This function is mostly useless, provided only for the sake of |
| 193 |
* completeness. |
| 194 |
* |
| 195 |
* @param fileName The path to the file, should start with "/" |
| 196 |
* if relative to the archive root. |
| 197 |
* @return Path relative to the current dir. |
| 198 |
*/ |
| 199 |
QString relativeFilePath(const QString &fileName) const; |
| 200 |
/// Sets the default case sensitivity mode. |
| 201 |
void setCaseSensitivity(QuaZip::CaseSensitivity caseSensitivity); |
| 202 |
/// Sets the default filter. |
| 203 |
void setFilter(QDir::Filters filters); |
| 204 |
/// Sets the default name filter. |
| 205 |
void setNameFilters(const QStringList &nameFilters); |
| 206 |
/// Goes to the specified path. |
| 207 |
/** |
| 208 |
The difference from cd() is that this function never checks if the |
| 209 |
path actually exists and doesn't use relative paths, so it's |
| 210 |
possible to go to the root directory with setPath(""). |
| 211 |
|
| 212 |
Note that this function still chops the trailing and/or leading |
| 213 |
'/' and treats a single '/' as the root path (path() will still |
| 214 |
return an empty string). |
| 215 |
*/ |
| 216 |
void setPath(const QString &path); |
| 217 |
/// Sets the default sorting mode. |
| 218 |
void setSorting(QDir::SortFlags sort); |
| 219 |
/// Returns the default sorting mode. |
| 220 |
QDir::SortFlags sorting() const; |
| 221 |
}; |
| 222 |
|
| 223 |
#endif // QUAZIP_QUAZIPDIR_H |