| 1 | 
 #ifndef QUA_ZIPNEWINFO_H | 
 
 
 
 
 
 | 2 | 
 #define QUA_ZIPNEWINFO_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, see | 
 
 
 
 
 
 | 25 | 
 quazip/(un)zip.h files for details, basically it's zlib license. | 
 
 
 
 
 
 | 26 | 
  **/ | 
 
 
 
 
 
 | 27 | 
  | 
 
 
 
 
 
 | 28 | 
 #include <QDateTime> | 
 
 
 
 
 
 | 29 | 
 #include <QFile> | 
 
 
 
 
 
 | 30 | 
 #include <QString> | 
 
 
 
 
 
 | 31 | 
  | 
 
 
 
 
 
 | 32 | 
 #include "quazip_global.h" | 
 
 
 
 
 
 | 33 | 
  | 
 
 
 
 
 
 | 34 | 
 #include "quazipfileinfo.h" | 
 
 
 
 
 
 | 35 | 
  | 
 
 
 
 
 
 | 36 | 
 /// Information about a file to be created. | 
 
 
 
 
 
 | 37 | 
 /** This structure holds information about a file to be created inside | 
 
 
 
 
 
 | 38 | 
  * ZIP archive. At least name should be set to something correct before | 
 
 
 
 
 
 | 39 | 
  * passing this structure to | 
 
 
 
 
 
 | 40 | 
  * QuaZipFile::open(OpenMode,const QuaZipNewInfo&,int,int,bool). | 
 
 
 
 
 
 | 41 | 
  * | 
 
 
 
 
 
 | 42 | 
  * Zip64 support of this structure is slightly limited: in the raw mode (when | 
 
 
 
 
 
 | 43 | 
  * a pre-compressed file is written into a ZIP file as-is), it is necessary | 
 
 
 
 
 
 | 44 | 
  * to specify the uncompressed file size and the appropriate field is 32 bit. | 
 
 
 
 
 
 | 45 | 
  * Since the raw mode is used extremely rare, there is no real need to have | 
 
 
 
 
 
 | 46 | 
  * a separate QuaZipNewInfo64 structure like QuaZipFileInfo64. It may be added | 
 
 
 
 
 
 | 47 | 
  * in the future though, if there is a demand for the raw mode with zip64 | 
 
 
 
 
 
 | 48 | 
  * archives. | 
 
 
 
 
 
 | 49 | 
  **/ | 
 
 
 
 
 
 | 50 | 
 struct QUAZIP_EXPORT QuaZipNewInfo { | 
 
 
 
 
 
 | 51 | 
   /// File name. | 
 
 
 
 
 
 | 52 | 
   /** This field holds file name inside archive, including path relative | 
 
 
 
 
 
 | 53 | 
    * to archive root. | 
 
 
 
 
 
 | 54 | 
    **/ | 
 
 
 
 
 
 | 55 | 
   QString name; | 
 
 
 
 
 
 | 56 | 
   /// File timestamp. | 
 
 
 
 
 
 | 57 | 
   /** This is the last file modification date and time. Will be stored | 
 
 
 
 
 
 | 58 | 
    * in the archive central directory. It is a good practice to set it | 
 
 
 
 
 
 | 59 | 
    * to the source file timestamp instead of archive creating time. Use | 
 
 
 
 
 
 | 60 | 
    * setFileDateTime() or QuaZipNewInfo(const QString&, const QString&). | 
 
 
 
 
 
 | 61 | 
    **/ | 
 
 
 
 
 
 | 62 | 
   QDateTime dateTime; | 
 
 
 
 
 
 | 63 | 
   /// File internal attributes. | 
 
 
 
 
 
 | 64 | 
   quint16 internalAttr; | 
 
 
 
 
 
 | 65 | 
   /// File external attributes. | 
 
 
 
 
 
 | 66 | 
   /** | 
 
 
 
 
 
 | 67 | 
     The highest 16 bits contain Unix file permissions and type (dir or | 
 
 
 
 
 
 | 68 | 
     file). The constructor QuaZipNewInfo(const QString&, const QString&) | 
 
 
 
 
 
 | 69 | 
     takes permissions from the provided file. | 
 
 
 
 
 
 | 70 | 
     */ | 
 
 
 
 
 
 | 71 | 
   quint32 externalAttr; | 
 
 
 
 
 
 | 72 | 
   /// File comment. | 
 
 
 
 
 
 | 73 | 
   /** Will be encoded using QuaZip::getCommentCodec(). | 
 
 
 
 
 
 | 74 | 
    **/ | 
 
 
 
 
 
 | 75 | 
   QString comment; | 
 
 
 
 
 
 | 76 | 
   /// File local extra field. | 
 
 
 
 
 
 | 77 | 
   QByteArray extraLocal; | 
 
 
 
 
 
 | 78 | 
   /// File global extra field. | 
 
 
 
 
 
 | 79 | 
   QByteArray extraGlobal; | 
 
 
 
 
 
 | 80 | 
   /// Uncompressed file size. | 
 
 
 
 
 
 | 81 | 
   /** This is only needed if you are using raw file zipping mode, i. e. | 
 
 
 
 
 
 | 82 | 
    * adding precompressed file in the zip archive. | 
 
 
 
 
 
 | 83 | 
    **/ | 
 
 
 
 
 
 | 84 | 
   ulong uncompressedSize; | 
 
 
 
 
 
 | 85 | 
   /// Constructs QuaZipNewInfo instance. | 
 
 
 
 
 
 | 86 | 
   /** Initializes name with \a name, dateTime with current date and | 
 
 
 
 
 
 | 87 | 
    * time. Attributes are initialized with zeros, comment and extra | 
 
 
 
 
 
 | 88 | 
    * field with null values. | 
 
 
 
 
 
 | 89 | 
    **/ | 
 
 
 
 
 
 | 90 | 
   QuaZipNewInfo(const QString& name); | 
 
 
 
 
 
 | 91 | 
   /// Constructs QuaZipNewInfo instance. | 
 
 
 
 
 
 | 92 | 
   /** Initializes name with \a name. Timestamp and permissions are taken | 
 
 
 
 
 
 | 93 | 
    * from the specified file. If the \a file does not exists or its timestamp | 
 
 
 
 
 
 | 94 | 
    * is inaccessible (e. g. you do not have read permission for the | 
 
 
 
 
 
 | 95 | 
    * directory file in), uses current time and zero permissions. Other attributes are | 
 
 
 
 
 
 | 96 | 
    * initialized with zeros, comment and extra field with null values. | 
 
 
 
 
 
 | 97 | 
    *  | 
 
 
 
 
 
 | 98 | 
    * \sa setFileDateTime() | 
 
 
 
 
 
 | 99 | 
    **/ | 
 
 
 
 
 
 | 100 | 
   QuaZipNewInfo(const QString& name, const QString& file); | 
 
 
 
 
 
 | 101 | 
   /// Initializes the new instance from existing file info. | 
 
 
 
 
 
 | 102 | 
   /** Mainly used when copying files between archives. | 
 
 
 
 
 
 | 103 | 
    * | 
 
 
 
 
 
 | 104 | 
    * Both extra fields are initialized to existing.extra. | 
 
 
 
 
 
 | 105 | 
    * @brief QuaZipNewInfo | 
 
 
 
 
 
 | 106 | 
    * @param existing | 
 
 
 
 
 
 | 107 | 
    */ | 
 
 
 
 
 
 | 108 | 
   QuaZipNewInfo(const QuaZipFileInfo &existing); | 
 
 
 
 
 
 | 109 | 
   /// Initializes the new instance from existing file info. | 
 
 
 
 
 
 | 110 | 
   /** Mainly used when copying files between archives. | 
 
 
 
 
 
 | 111 | 
    * | 
 
 
 
 
 
 | 112 | 
    * Both extra fields are initialized to existing.extra. | 
 
 
 
 
 
 | 113 | 
    * @brief QuaZipNewInfo | 
 
 
 
 
 
 | 114 | 
    * @param existing | 
 
 
 
 
 
 | 115 | 
    */ | 
 
 
 
 
 
 | 116 | 
   QuaZipNewInfo(const QuaZipFileInfo64 &existing); | 
 
 
 
 
 
 | 117 | 
   /// Sets the file timestamp from the existing file. | 
 
 
 
 
 
 | 118 | 
   /** Use this function to set the file timestamp from the existing | 
 
 
 
 
 
 | 119 | 
    * file. Use it like this: | 
 
 
 
 
 
 | 120 | 
    * \code | 
 
 
 
 
 
 | 121 | 
    * QuaZipFile zipFile(&zip); | 
 
 
 
 
 
 | 122 | 
    * QFile file("file-to-add"); | 
 
 
 
 
 
 | 123 | 
    * file.open(QIODevice::ReadOnly); | 
 
 
 
 
 
 | 124 | 
    * QuaZipNewInfo info("file-name-in-archive"); | 
 
 
 
 
 
 | 125 | 
    * info.setFileDateTime("file-to-add"); // take the timestamp from file | 
 
 
 
 
 
 | 126 | 
    * zipFile.open(QIODevice::WriteOnly, info); | 
 
 
 
 
 
 | 127 | 
    * \endcode | 
 
 
 
 
 
 | 128 | 
    * | 
 
 
 
 
 
 | 129 | 
    * This function does not change dateTime if some error occured (e. g. | 
 
 
 
 
 
 | 130 | 
    * file is inaccessible). | 
 
 
 
 
 
 | 131 | 
    **/ | 
 
 
 
 
 
 | 132 | 
   void setFileDateTime(const QString& file); | 
 
 
 
 
 
 | 133 | 
   /// Sets the file permissions from the existing file. | 
 
 
 
 
 
 | 134 | 
   /** | 
 
 
 
 
 
 | 135 | 
     Takes permissions from the file and sets the high 16 bits of | 
 
 
 
 
 
 | 136 | 
     external attributes. Uses QFileInfo to get permissions on all | 
 
 
 
 
 
 | 137 | 
     platforms. | 
 
 
 
 
 
 | 138 | 
     */ | 
 
 
 
 
 
 | 139 | 
   void setFilePermissions(const QString &file); | 
 
 
 
 
 
 | 140 | 
   /// Sets the file permissions. | 
 
 
 
 
 
 | 141 | 
   /** | 
 
 
 
 
 
 | 142 | 
     Modifies the highest 16 bits of external attributes. The type part | 
 
 
 
 
 
 | 143 | 
     is set to dir if the name ends with a slash, and to regular file | 
 
 
 
 
 
 | 144 | 
     otherwise. | 
 
 
 
 
 
 | 145 | 
     */ | 
 
 
 
 
 
 | 146 | 
   void setPermissions(QFile::Permissions permissions); | 
 
 
 
 
 
 | 147 | 
   /// Sets the NTFS times from an existing file. | 
 
 
 
 
 
 | 148 | 
   /** | 
 
 
 
 
 
 | 149 | 
    * If the file doesn't exist, a warning is printed to the stderr and nothing | 
 
 
 
 
 
 | 150 | 
    * is done. Otherwise, all three times, as reported by | 
 
 
 
 
 
 | 151 | 
    * QFileInfo::lastModified(), QFileInfo::lastRead() and QFileInfo::created(), | 
 
 
 
 
 
 | 152 | 
    * are written to the NTFS extra field record. | 
 
 
 
 
 
 | 153 | 
    * | 
 
 
 
 
 
 | 154 | 
    * The NTFS record is written to | 
 
 
 
 
 
 | 155 | 
    * both the local and the global extra fields, updating the existing record | 
 
 
 
 
 
 | 156 | 
    * if there is one, or creating a new one and appending it to the end | 
 
 
 
 
 
 | 157 | 
    * of each extra field. | 
 
 
 
 
 
 | 158 | 
    * | 
 
 
 
 
 
 | 159 | 
    * The microseconds will be zero, as they aren't reported by QFileInfo. | 
 
 
 
 
 
 | 160 | 
    * @param fileName | 
 
 
 
 
 
 | 161 | 
    */ | 
 
 
 
 
 
 | 162 | 
   void setFileNTFSTimes(const QString &fileName); | 
 
 
 
 
 
 | 163 | 
   /// Sets the NTFS modification time. | 
 
 
 
 
 
 | 164 | 
   /** | 
 
 
 
 
 
 | 165 | 
    * The time is written into the NTFS record in | 
 
 
 
 
 
 | 166 | 
    * both the local and the global extra fields, updating the existing record | 
 
 
 
 
 
 | 167 | 
    * if there is one, or creating a new one and appending it to the end | 
 
 
 
 
 
 | 168 | 
    * of each extra field. When updating an existing record, all other fields | 
 
 
 
 
 
 | 169 | 
    * are left intact. | 
 
 
 
 
 
 | 170 | 
    * @param mTime The new modification time. | 
 
 
 
 
 
 | 171 | 
    * @param fineTicks The fractional part of milliseconds, in 100-nanosecond | 
 
 
 
 
 
 | 172 | 
    *        ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than | 
 
 
 
 
 
 | 173 | 
    *        9999 will add milliseconds or even seconds, but this can be | 
 
 
 
 
 
 | 174 | 
    *        confusing and therefore is discouraged. | 
 
 
 
 
 
 | 175 | 
    */ | 
 
 
 
 
 
 | 176 | 
   void setFileNTFSmTime(const QDateTime &mTime, int fineTicks = 0); | 
 
 
 
 
 
 | 177 | 
   /// Sets the NTFS access time. | 
 
 
 
 
 
 | 178 | 
   /** | 
 
 
 
 
 
 | 179 | 
    * The time is written into the NTFS record in | 
 
 
 
 
 
 | 180 | 
    * both the local and the global extra fields, updating the existing record | 
 
 
 
 
 
 | 181 | 
    * if there is one, or creating a new one and appending it to the end | 
 
 
 
 
 
 | 182 | 
    * of each extra field. When updating an existing record, all other fields | 
 
 
 
 
 
 | 183 | 
    * are left intact. | 
 
 
 
 
 
 | 184 | 
    * @param aTime The new access time. | 
 
 
 
 
 
 | 185 | 
    * @param fineTicks The fractional part of milliseconds, in 100-nanosecond | 
 
 
 
 
 
 | 186 | 
    *        ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than | 
 
 
 
 
 
 | 187 | 
    *        9999 will add milliseconds or even seconds, but this can be | 
 
 
 
 
 
 | 188 | 
    *        confusing and therefore is discouraged. | 
 
 
 
 
 
 | 189 | 
    */ | 
 
 
 
 
 
 | 190 | 
   void setFileNTFSaTime(const QDateTime &aTime, int fineTicks = 0); | 
 
 
 
 
 
 | 191 | 
   /// Sets the NTFS creation time. | 
 
 
 
 
 
 | 192 | 
   /** | 
 
 
 
 
 
 | 193 | 
    * The time is written into the NTFS record in | 
 
 
 
 
 
 | 194 | 
    * both the local and the global extra fields, updating the existing record | 
 
 
 
 
 
 | 195 | 
    * if there is one, or creating a new one and appending it to the end | 
 
 
 
 
 
 | 196 | 
    * of each extra field. When updating an existing record, all other fields | 
 
 
 
 
 
 | 197 | 
    * are left intact. | 
 
 
 
 
 
 | 198 | 
    * @param cTime The new creation time. | 
 
 
 
 
 
 | 199 | 
    * @param fineTicks The fractional part of milliseconds, in 100-nanosecond | 
 
 
 
 
 
 | 200 | 
    *        ticks (i. e. 9999 ticks = 999.9 microsecond). Values greater than | 
 
 
 
 
 
 | 201 | 
    *        9999 will add milliseconds or even seconds, but this can be | 
 
 
 
 
 
 | 202 | 
    *        confusing and therefore is discouraged. | 
 
 
 
 
 
 | 203 | 
    */ | 
 
 
 
 
 
 | 204 | 
   void setFileNTFScTime(const QDateTime &cTime, int fineTicks = 0); | 
 
 
 
 
 
 | 205 | 
 }; | 
 
 
 
 
 
 | 206 | 
  | 
 
 
 
 
 
 | 207 | 
 #endif |