KCompressionDevice Class

Header: #include <KCompressionDevice>
CMake: find_package(KF6 REQUIRED COMPONENTS Archive)
target_link_libraries(mytarget PRIVATE KF6::Archive)
Inherits: QIODevice

Public Types

enum CompressionType { GZip, BZip2, Xz, None, Zstd }

Public Functions

(since 5.85) KCompressionDevice(const QString &fileName)
KCompressionDevice(const QString &fileName, KCompressionDevice::CompressionType type)
KCompressionDevice(QIODevice *inputDevice, bool autoDeleteInputDevice, KCompressionDevice::CompressionType type)
virtual ~KCompressionDevice() override
KCompressionDevice::CompressionType compressionType() const
QFileDevice::FileError error() const
void setOrigFileName(const QByteArray &fileName)
void setSkipHeaders()

Reimplemented Public Functions

virtual bool seek(qint64) override

Static Public Members

(since 5.85) KCompressionDevice::CompressionType compressionTypeForMimeType(const QString &mimetype)
KFilterBase *filterForCompressionType(KCompressionDevice::CompressionType type)

Detailed Description

A class for reading and writing compressed data onto a device (e.g. file, but other usages are possible, like a buffer or a socket).

Use this class to read/write compressed files.

Member Type Documentation

enum KCompressionDevice::CompressionType

ConstantValue
KCompressionDevice::GZip0
KCompressionDevice::BZip21
KCompressionDevice::Xz2
KCompressionDevice::None3
KCompressionDevice::Zstd (since 5.82)4

Member Function Documentation

[explicit, since 5.85] KCompressionDevice::KCompressionDevice(const QString &fileName)

Constructs a KCompressionDevice for a given fileName.

fileName the name of the file to filter.

This function was introduced in 5.85.

KCompressionDevice::KCompressionDevice(const QString &fileName, KCompressionDevice::CompressionType type)

Constructs a KCompressionDevice for a given CompressionType (e.g. GZip, BZip2 etc.).

fileName the name of the file to filter.

type the CompressionType to use.

KCompressionDevice::KCompressionDevice(QIODevice *inputDevice, bool autoDeleteInputDevice, KCompressionDevice::CompressionType type)

Constructs a KCompressionDevice for a given CompressionType (e.g. GZip, BZip2 etc.).

inputDevice input device.

autoDeleteInputDevice if true, inputDevice will be deleted automatically

type the CompressionType to use.

[override virtual noexcept] KCompressionDevice::~KCompressionDevice()

Destructs the KCompressionDevice.

Calls close() if the filter device is still open.

KCompressionDevice::CompressionType KCompressionDevice::compressionType() const

The compression actually used by this device.

If the support for the compression requested in the constructor is not available, then the device will use None.

[static, since 5.85] KCompressionDevice::CompressionType KCompressionDevice::compressionTypeForMimeType(const QString &mimetype)

Returns the compression type for the given MIME type, if possible. Otherwise returns None.

This handles simple cases like application/gzip, but also application/x-compressed-tar, and inheritance.

This function was introduced in 5.85.

QFileDevice::FileError KCompressionDevice::error() const

Returns the error code from the last failing operation. This is especially useful after calling close(), which unfortunately returns void (see https://bugreports.qt.io/browse/QTBUG-70033), to see if the flushing done by close was able to write all the data to disk.

[static] KFilterBase *KCompressionDevice::filterForCompressionType(KCompressionDevice::CompressionType type)

Call this to create the appropriate filter for the CompressionType named type.

type the type of the compression filter

Returns the filter for the type, or 0 if not found

[override virtual] bool KCompressionDevice::seek(qint64)

Reimplements: QIODevice::seek(qint64 pos).

That one can be quite slow, when going back. Use with care.

void KCompressionDevice::setOrigFileName(const QByteArray &fileName)

For writing gzip compressed files only: set the name of the original file, to be used in the gzip header.

fileName the name of the original file

void KCompressionDevice::setSkipHeaders()

Call this let this device skip the gzip headers when reading/writing. This way KCompressionDevice (with gzip filter) can be used as a direct wrapper around zlib - this is used by KZip.