zipios::FileEntry(3) | zipios | zipios::FileEntry(3) |
NAME¶
zipios::FileEntry - A FileEntry represents an entry in a FileCollection.
SYNOPSIS¶
#include <fileentry.hpp>
Inherited by zipios::DirectoryEntry, zipios::StreamEntry, and zipios::ZipLocalEntry.
Public Types¶
typedef std::vector< unsigned char > buffer_t
typedef int CompressionLevel
The compression level to be used to save an entry. typedef uint32_t
crc32_t
typedef std::shared_ptr< FileEntry > pointer_t
typedef std::vector< pointer_t > vector_t
Public Member Functions¶
FileEntry (FilePath const &filename, std::string
const &comment=std::string())
Initialize a FileEntry object. virtual ~FileEntry ()
Clean up a FileEntry object. virtual pointer_t clone ()
const =0
Create a clone of a file entry. virtual std::string getComment () const
Retrieve the comment of the file entry. virtual std::size_t
getCompressedSize () const
Retrieve the size of the file when compressed. virtual crc32_t
getCrc () const
Return the CRC of the entry. std::streampos getEntryOffset () const
Get the offset of this entry in a Zip archive. virtual buffer_t
getExtra () const
Some extra data to be stored along the entry. virtual std::string
getFileName () const
Return the basename of this entry. virtual std::size_t getHeaderSize ()
const
Retrieve the size of the header. virtual CompressionLevel
getLevel () const
Retrieve the compression level. virtual StorageMethod getMethod
() const
Return the method used to create this entry. virtual std::string
getName () const
Return the filename of the entry. virtual std::size_t getSize () const
Retrieve the size of the file when uncompressed. virtual
DOSDateTime::dosdatetime_t getTime () const
Get the MS-DOS date/time of this entry. virtual std::time_t getUnixTime
() const
Get the Unix date/time of this entry. bool hasCrc () const
Check whether the CRC32 was defined. virtual bool isDirectory () const
Check whether the filename represents a directory. virtual bool isEqual
(FileEntry const &file_entry) const
Compare two file entries for equality. virtual bool isValid () const
Check whether this entry is valid. virtual void read (std::istream
&is)
Read this FileEntry from the input stream. virtual void
setComment (std::string const &comment)
Set the comment field for the FileEntry. virtual void
setCompressedSize (size_t size)
Set the size when the file is compressed. virtual void setCrc
(crc32_t crc)
Save the CRC of the entry. void setEntryOffset (std::streampos offset)
Defines the position of the entry in a Zip archive. virtual void
setExtra (buffer_t const &extra)
Set the extra field buffer. virtual void setLevel
(CompressionLevel level)
Define the level of compression to use by this FileEntry. virtual void
setMethod (StorageMethod method)
Sets the storage method field for the entry. virtual void setSize
(size_t size)
Sets the size field for the entry. virtual void setTime
(DOSDateTime::dosdatetime_t time)
Set the FileEntry time using a DOS time. virtual void
setUnixTime (std::time_t time)
Sets the time field in Unix time format for the entry. virtual std::string
toString () const
Returns a human-readable string representation of the entry. virtual void
write (std::ostream &os)
Write this FileEntry to the output stream.
Static Public Attributes¶
static CompressionLevel const
COMPRESSION_LEVEL_DEFAULT = -3
static CompressionLevel const COMPRESSION_LEVEL_FASTEST = -1
static CompressionLevel const COMPRESSION_LEVEL_MAXIMUM = 100
static CompressionLevel const COMPRESSION_LEVEL_MINIMUM = 1
static CompressionLevel const COMPRESSION_LEVEL_NONE = 0
static CompressionLevel const COMPRESSION_LEVEL_SMALLEST = -2
Protected Attributes¶
std::string m_comment
StorageMethod m_compress_method = StorageMethod::STORED
CompressionLevel m_compression_level =
COMPRESSION_LEVEL_DEFAULT
uint32_t m_crc_32 = 0
std::streampos m_entry_offset = 0
buffer_t m_extra_field
FilePath m_filename
bool m_has_crc_32 = false
std::size_t m_uncompressed_size = 0
time_t m_unix_time = 0
bool m_valid = false
Detailed Description¶
The interface is a copy of the ZipEntry interface from the java.util.zip package. The name has been changed to FileEntry, as FileCollection is a more general abstraction, that covers other types of file collections than just zip files.
Note
Definition at line 75 of file fileentry.hpp.
Member Typedef Documentation¶
typedef std::vector<unsigned char> zipios::FileEntry::buffer_t¶
Definition at line 80 of file fileentry.hpp.
int zipios::FileEntry::CompressionLevel¶
Values defined using this time represent the compression level to be used when compressing an entry.
If unchanged, use the DEFAULT_COMPRESSION value.
It is possible to change the compression level to NO_COMPRESSION or use the setMethod() with STORED to avoid any compression (i.e. create a zip file which awfully looks like a tarball).
Todo
Definition at line 85 of file fileentry.hpp.
typedef uint32_t zipios::FileEntry::crc32_t¶
Definition at line 81 of file fileentry.hpp.
typedef std::shared_ptr<FileEntry> zipios::FileEntry::pointer_t¶
Definition at line 78 of file fileentry.hpp.
typedef std::vector<pointer_t> zipios::FileEntry::vector_t¶
Definition at line 79 of file fileentry.hpp.
Constructor & Destructor Documentation¶
zipios::FileEntry::FileEntry (FilePath const & filename, std::string const & comment = std::string())¶
This function initializes a FileEntry object. By default you may define the filename of the FileEntry object.
In case of an on disk directory, the filename should be the path to the file that can be read from disk, otherwise the FileEntry object will be viewed as invalid. There is, otherwise, no restriction to the filename.
Parameters
comment The comment attached to the file.
Definition at line 99 of file fileentry.cpp.
zipios::FileEntry::~FileEntry () [virtual]¶
The destructor is defined as it has to be virtual.
It will eventually clean up resources used by the FileEntry class.
Definition at line 125 of file fileentry.cpp.
Member Function Documentation¶
FileEntry::pointer_t zipios::FileEntry::clone () const [pure virtual]¶
This function creates a heap allocated clone of the object this method is called for.
Note that the object is expected to overload this function in order to create a clone of the correct type.
Returns
Implemented in zipios::ZipCentralDirectoryEntry, zipios::ZipLocalEntry, zipios::DirectoryEntry, and zipios::StreamEntry.
Referenced by zipios::FileCollection::addEntry().
std::string zipios::FileEntry::getComment () const [virtual]¶
This function returns the comment of this entry.
If the entry was not assigned a comment, this function returns an empty string. All entries can be given a comment, although for most it will be ignored unless you save the file to a Zip archive.
Returns
Definition at line 141 of file fileentry.cpp.
References m_comment.
size_t zipios::FileEntry::getCompressedSize () const [virtual]¶
This function returns the compressed size of the entry. If the entry is not stored in a compressed format, the uncompressed size is returned.
Returns
Reimplemented in zipios::ZipLocalEntry.
Definition at line 155 of file fileentry.cpp.
References getSize().
Referenced by toString().
FileEntry::crc32_t zipios::FileEntry::getCrc () const [virtual]¶
This function returns the CRC 32 of this entry, if it has one.
The CRC is set only after the file is compressed so it may not always be available. The hasCrc() function can be used to know whether it was set before.
Returns
Todo
Definition at line 173 of file fileentry.cpp.
References m_crc_32.
std::streampos zipios::FileEntry::getEntryOffset () const¶
This function retrieves the offset at which this FileEntry resides in the Zip archive it is attached to.
Note that in case of a Zip archive embedded in another file, the offset is virtual (relative to the start of the Zip archive in the larger file.)
Returns
Definition at line 193 of file fileentry.cpp.
References m_entry_offset.
FileEntry::buffer_t zipios::FileEntry::getExtra () const [virtual]¶
This function returns a copy of the vector of bytes of extra data that are stored with the entry.
This buffer should be generated using the still non-existent ZipExtra class. This includes definitions of additional meta data necessary on various operating systems. For example, Linux makes use of the 'UT' (Universal Time) to save the atime, ctime, and mtime parameters, and 'ux' (Unix) to save the Unix permissions and user identifier (uid) and group identifier (gid).
Returns
Definition at line 213 of file fileentry.cpp.
References m_extra_field.
std::string zipios::FileEntry::getFileName () const [virtual]¶
This function returns the filename only of the entry.
Warning
Returns
Definition at line 311 of file fileentry.cpp.
References zipios::FilePath::filename(), and m_filename.
size_t zipios::FileEntry::getHeaderSize () const [virtual]¶
This function determines the size of the Zip archive header necessary for that file.
By default the function returns zero meaning that no header is defined.
Returns
Reimplemented in zipios::ZipCentralDirectoryEntry, and zipios::ZipLocalEntry.
Definition at line 228 of file fileentry.cpp.
FileEntry::CompressionLevel zipios::FileEntry::getLevel () const [virtual]¶
Use this function to read the compression level to use to compress a file.
Note that the compression level is rarely saved in the destination file, so after reading a file from a Zip archive this parameter is set to the default compression level which does not represent the level used to create the file.
The compression level is a number between 1 and 100 if compression is wanted. 0 for no compression. A few negative numbers represent various default compression levels.
Returns
See also
setLevel()
Definition at line 253 of file fileentry.cpp.
References COMPRESSION_LEVEL_NONE, isDirectory(), and m_compression_level.
StorageMethod zipios::FileEntry::getMethod () const [virtual]¶
This function returns the method used to store the entry data in the FileCollection it is attached to.
Returns
See also
setMethod()
Definition at line 273 of file fileentry.cpp.
References isDirectory(), m_compress_method, and zipios::STORED.
Referenced by zipios::ZipInputStreambuf::ZipInputStreambuf(), and zipios::ZipInputStreambuf::underflow().
std::string zipios::FileEntry::getName () const [virtual]¶
The function returns the full filename of the entry, including a path if the entry is stored in a sub-folder.
Returns
Definition at line 294 of file fileentry.cpp.
References m_filename.
std::size_t zipios::FileEntry::getSize () const [virtual]¶
This function returns the uncompressed size of the entry data.
Returns
Definition at line 323 of file fileentry.cpp.
References m_uncompressed_size.
Referenced by zipios::ZipInputStreambuf::ZipInputStreambuf(), and getCompressedSize().
DOSDateTime::dosdatetime_t zipios::FileEntry::getTime () const [virtual]¶
This function returns the date and time of the entry in MS-DOS date/time format.
Note
In 32 bits, the Unix date is limited to 03:14:07 on Tuesday, 19 January 2038. Please switch to a 64 bit OS soon.
Returns
Definition at line 344 of file fileentry.cpp.
References zipios::DOSDateTime::getDOSDateTime(), m_unix_time, and zipios::DOSDateTime::setUnixTimestamp().
std::time_t zipios::FileEntry::getUnixTime () const [virtual]¶
This function returns the date and time of the entry in Unix date/time format (see time()).
Note
Unless you have an old 32 bit system that defines time_t as a 32 bit value, a Unix date can be considered infinite. Otherwise it is limited to some time in 2038.
Returns
Definition at line 376 of file fileentry.cpp.
References m_unix_time.
bool zipios::FileEntry::hasCrc () const¶
This function returns true if the setCrc() function was called earlier with a valid CRC32 and the FileEntry implementation supports a CRC (i.e. a DirectoryEntry does not have a CRC).
Returns
Definition at line 390 of file fileentry.cpp.
References m_has_crc_32.
bool zipios::FileEntry::isDirectory () const [virtual]¶
This function checks the last character of the filename, if it is a separator ('/') then the function returns true meaning that the file represents a directory.
Returns
Reimplemented in zipios::ZipLocalEntry.
Definition at line 404 of file fileentry.cpp.
References zipios::FilePath::isDirectory(), and m_filename.
Referenced by getLevel(), getMethod(), setLevel(), setMethod(), and toString().
bool zipios::FileEntry::isEqual (FileEntry const & file_entry) const [virtual]¶
This function compares most of the fields between two file entries to see whether they are equal or not.
Note that this does not compare the file contents, only the file entry meta data.
Warning
Parameters
Returns
Reimplemented in zipios::ZipLocalEntry, zipios::DirectoryEntry, and zipios::StreamEntry.
Definition at line 430 of file fileentry.cpp.
References m_comment, m_compress_method, m_crc_32, m_filename, m_has_crc_32, m_uncompressed_size, m_unix_time, and m_valid.
Referenced by zipios::ZipLocalEntry::isEqual(), zipios::DirectoryEntry::isEqual(), and zipios::StreamEntry::isEqual().
bool zipios::FileEntry::isValid () const [virtual]¶
Any method or operator that initializes a FileEntry may set a flag that specifies whether the file entry is valid or not. If it is not this method returns false.
Returns
Definition at line 452 of file fileentry.cpp.
References m_valid.
Referenced by zipios::ZipInputStreambuf::ZipInputStreambuf().
void zipios::FileEntry::read (std::istream & is) [virtual]¶
This function is called when the FileEntry should be initialized from the specified input stream.
Exceptions
Parameters
Reimplemented in zipios::ZipCentralDirectoryEntry, and zipios::ZipLocalEntry.
Definition at line 731 of file fileentry.cpp.
void zipios::FileEntry::setComment (std::string const & comment) [virtual]¶
This function sets the comment of this FileEntry. Note that all implementations of the FileEntry may not include support for a comment. In that case this function does nothing.
Parameters
Definition at line 466 of file fileentry.cpp.
References m_comment.
void zipios::FileEntry::setCompressedSize (size_t size) [virtual]¶
This function saves the compressed size of the entry in this object.
By default the compressed size is viewed as the same as the uncompressed size (i.e. as if STORED was used for the compression method.)
Parameters
Reimplemented in zipios::ZipLocalEntry.
Definition at line 485 of file fileentry.cpp.
void zipios::FileEntry::setCrc (crc32_t crc) [virtual]¶
This function saves the CRC field in this FileEntry field.
Parameters
Reimplemented in zipios::ZipLocalEntry.
Definition at line 497 of file fileentry.cpp.
void zipios::FileEntry::setEntryOffset (std::streampos offset)¶
This function defines the position of the FileEntry in a Zip archive. By default the position is set to zero.
The offset is generally read from a Zip directory entry.
When used to seek in a file, the FileCollection will add the start offset defined in the VirtualSeeker. In other words this is the position in the Zip archive itself, not the final position in the file you are reading the archive from.
Parameters
Definition at line 517 of file fileentry.cpp.
References m_entry_offset.
void zipios::FileEntry::setExtra (buffer_t const & extra) [virtual]¶
This function is used to set the extra field.
Only one type of file entry supports an extra field buffer. The others do nothing when this function is called.
Parameters
Definition at line 532 of file fileentry.cpp.
References m_extra_field.
void zipios::FileEntry::setLevel (CompressionLevel level) [virtual]¶
This function saves the level of compression the library should use to compress the file before saving it in the output file.
Note
Exceptions
Parameters
Definition at line 553 of file fileentry.cpp.
References COMPRESSION_LEVEL_MAXIMUM, COMPRESSION_LEVEL_MINIMUM, COMPRESSION_LEVEL_NONE, isDirectory(), and m_compression_level.
void zipios::FileEntry::setMethod (StorageMethod method) [virtual]¶
This function sets the method with which the file data is to be compressed.
The method is ignored in a file entry which cannot be compressed. (or more precisely, the method is forced as STORED.)
Exceptions
Parameters
Definition at line 590 of file fileentry.cpp.
References zipios::DEFLATED, isDirectory(), m_compress_method, and zipios::STORED.
void zipios::FileEntry::setSize (size_t size) [virtual]¶
This function is used to save the size of this file on disk when uncompressed.
Parameters
Definition at line 642 of file fileentry.cpp.
References m_uncompressed_size.
void zipios::FileEntry::setTime (DOSDateTime::dosdatetime_t dosdatetime) [virtual]¶
This function saves the specified dosdatetime value as the last modification date and time of this entry. This is generally used when reading that information * from a Zip archive. Otherwise you probably want to use the setUnixTime() instead since it is one to one compatible with the value handle by time(), stat(), and other OS functions.
Parameters
Definition at line 658 of file fileentry.cpp.
References zipios::DOSDateTime::getUnixTimestamp(), zipios::DOSDateTime::setDOSDateTime(), and setUnixTime().
void zipios::FileEntry::setUnixTime (std::time_t time) [virtual]¶
This function is used to set the last modification time of this entry. In most cases this comes from the stat structure field named st_mtime. If you are creating a file directly in memory, you may use the return value of time(nullptr);.
Parameters
Definition at line 675 of file fileentry.cpp.
References m_unix_time.
Referenced by setTime().
std::string zipios::FileEntry::toString () const [virtual]¶
This function transforms the basic information of the entry in a string. Note that most of the information is lost as the function is likely to only display the filename and the size of the file, nothing more.
Returns
Definition at line 690 of file fileentry.cpp.
References getCompressedSize(), isDirectory(), m_filename, and m_uncompressed_size.
Referenced by zipios::operator<<().
void zipios::FileEntry::write (std::ostream & os) [virtual]¶
This function is called when the FileEntry should be saved in the specified output stream.
Exceptions
Parameters
Reimplemented in zipios::ZipCentralDirectoryEntry, and zipios::ZipLocalEntry.
Definition at line 749 of file fileentry.cpp.
Member Data Documentation¶
CompressionLevel const zipios::FileEntry::COMPRESSION_LEVEL_DEFAULT = -3 [static]¶
Definition at line 87 of file fileentry.hpp.
Referenced by zipios::DeflateOutputStreambuf::init(), and main().
CompressionLevel const zipios::FileEntry::COMPRESSION_LEVEL_FASTEST = -1 [static]¶
Definition at line 89 of file fileentry.hpp.
Referenced by zipios::DeflateOutputStreambuf::init(), and main().
CompressionLevel const zipios::FileEntry::COMPRESSION_LEVEL_MAXIMUM = 100 [static]¶
Definition at line 92 of file fileentry.hpp.
Referenced by zipios::DeflateOutputStreambuf::init(), main(), and setLevel().
CompressionLevel const zipios::FileEntry::COMPRESSION_LEVEL_MINIMUM = 1 [static]¶
Definition at line 91 of file fileentry.hpp.
Referenced by zipios::DeflateOutputStreambuf::init(), main(), and setLevel().
CompressionLevel const zipios::FileEntry::COMPRESSION_LEVEL_NONE = 0 [static]¶
Definition at line 90 of file fileentry.hpp.
Referenced by zipios::ZipOutputStreambuf::closeEntry(), getLevel(), zipios::DeflateOutputStreambuf::init(), main(), zipios::ZipOutputStreambuf::overflow(), zipios::ZipOutputStreambuf::putNextEntry(), setLevel(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
CompressionLevel const zipios::FileEntry::COMPRESSION_LEVEL_SMALLEST = -2 [static]¶
Definition at line 88 of file fileentry.hpp.
Referenced by zipios::DeflateOutputStreambuf::init(), and main().
std::string zipios::FileEntry::m_comment [protected]¶
Definition at line 133 of file fileentry.hpp.
Referenced by getComment(), zipios::ZipCentralDirectoryEntry::getHeaderSize(), isEqual(), zipios::ZipCentralDirectoryEntry::read(), setComment(), and zipios::ZipCentralDirectoryEntry::write().
StorageMethod zipios::FileEntry::m_compress_method = StorageMethod::STORED [protected]¶
Definition at line 137 of file fileentry.hpp.
Referenced by getMethod(), isEqual(), zipios::ZipCentralDirectoryEntry::read(), zipios::ZipLocalEntry::read(), setMethod(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
CompressionLevel zipios::FileEntry::m_compression_level = COMPRESSION_LEVEL_DEFAULT [protected]¶
Definition at line 138 of file fileentry.hpp.
Referenced by getLevel(), setLevel(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
uint32_t zipios::FileEntry::m_crc_32 = 0 [protected]¶
Definition at line 139 of file fileentry.hpp.
Referenced by getCrc(), isEqual(), zipios::ZipCentralDirectoryEntry::read(), zipios::ZipLocalEntry::read(), zipios::ZipLocalEntry::setCrc(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
std::streampos zipios::FileEntry::m_entry_offset = 0 [protected]¶
Definition at line 136 of file fileentry.hpp.
Referenced by getEntryOffset(), zipios::ZipCentralDirectoryEntry::read(), setEntryOffset(), and zipios::ZipCentralDirectoryEntry::write().
buffer_t zipios::FileEntry::m_extra_field [protected]¶
Definition at line 140 of file fileentry.hpp.
Referenced by getExtra(), zipios::ZipCentralDirectoryEntry::getHeaderSize(), zipios::ZipLocalEntry::getHeaderSize(), zipios::ZipCentralDirectoryEntry::read(), zipios::ZipLocalEntry::read(), setExtra(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
FilePath zipios::FileEntry::m_filename [protected]¶
Definition at line 132 of file fileentry.hpp.
Referenced by zipios::DirectoryEntry::DirectoryEntry(), zipios::DirectoryEntry::computeCRC32(), getFileName(), zipios::ZipCentralDirectoryEntry::getHeaderSize(), zipios::ZipLocalEntry::getHeaderSize(), getName(), isDirectory(), isEqual(), zipios::ZipCentralDirectoryEntry::read(), zipios::ZipLocalEntry::read(), toString(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
bool zipios::FileEntry::m_has_crc_32 = false [protected]¶
Definition at line 141 of file fileentry.hpp.
Referenced by hasCrc(), isEqual(), and zipios::ZipLocalEntry::setCrc().
std::size_t zipios::FileEntry::m_uncompressed_size = 0 [protected]¶
Definition at line 134 of file fileentry.hpp.
Referenced by zipios::DirectoryEntry::DirectoryEntry(), zipios::StreamEntry::StreamEntry(), getSize(), isEqual(), zipios::ZipCentralDirectoryEntry::read(), zipios::ZipLocalEntry::read(), setSize(), toString(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
time_t zipios::FileEntry::m_unix_time = 0 [protected]¶
Definition at line 135 of file fileentry.hpp.
Referenced by zipios::DirectoryEntry::DirectoryEntry(), zipios::StreamEntry::StreamEntry(), getTime(), getUnixTime(), isEqual(), zipios::ZipCentralDirectoryEntry::read(), zipios::ZipLocalEntry::read(), setUnixTime(), zipios::ZipCentralDirectoryEntry::write(), and zipios::ZipLocalEntry::write().
bool zipios::FileEntry::m_valid = false [protected]¶
Definition at line 142 of file fileentry.hpp.
Referenced by zipios::DirectoryEntry::DirectoryEntry(), zipios::StreamEntry::StreamEntry(), isEqual(), isValid(), zipios::ZipCentralDirectoryEntry::read(), and zipios::ZipLocalEntry::read().
Author¶
Generated automatically by Doxygen for zipios from the source code.
Sat Dec 30 2023 01:18:29 | Version 2.3.2 |