5#include <QtCore/QByteArray>
6#include <QtCore/QCryptographicHash>
7#include <QtCore/QIODevice>
8#include <QtCore/QJsonDocument>
9#include <QtCore/QJsonParseError>
10#include <QtCore/QString>
11#include <QtCore/QStringList>
137bool decompressFile(
const QString &inputPath,
const QString &outputPath = QString(),
140 qint64 maxDecompressedBytes = 0);
148 const QString &outputPath = QString(),
149 bool removeOriginal =
false);
157 qint64 maxDecompressedBytes = 0);
170bool extractArchive(
const QString &archivePath,
const QString &outputDirectoryPath,
173 qint64 maxDecompressedBytes = 0);
187 qint64 maxDecompressedBytes = 0);
199 qint64 maxDecompressedBytes = 0);
230bool fileExists(
const QString &archivePath,
const QString &fileName,
239bool extractFile(
const QString &archivePath,
const QString &fileName,
240 const QString &outputPath = QString(),
248QByteArray
extractFileData(
const QString &archivePath,
const QString &fileName,
257bool extractFiles(
const QString &archivePath,
const QStringList &fileNames,
258 const QString &outputDirectoryPath,
269bool extractByPattern(
const QString &archivePath,
const QStringList &patterns,
270 const QString &outputDirectoryPath,
271 QStringList *extractedFiles =
nullptr,
287 qint64 maxDecompressedBytes = 0);
303 qint64 maxDecompressedBytes = 0);
326QByteArray
compress(
const QByteArray &data,
346QByteArray
uncompressData(
const QByteArray &data, qint64 maxDecompressedSize = 64LL * 1024 * 1024);
356 qint64 maxBytes = 0);
360 QCryptographicHash::Algorithm algorithm = QCryptographicHash::Sha256);
Shared type definitions for compression/archive operations.
std::function< void(int)> ProgressCallback
bool isCompressionFormat(Format format)
Check if format is a compression format (single stream)
QString computeFileHash(const QString &filePath, QCryptographicHash::Algorithm algorithm)
Hash file contents post-decompression.
bool fileExists(const QString &archivePath, const QString &fileName, Format format)
QByteArray decompressData(const QByteArray &data, Format format, qint64 maxDecompressedBytes)
bool extractArchiveAtomic(const QString &archivePath, const QString &outputDirectoryPath, Format format, ProgressCallback progress, qint64 maxDecompressedBytes)
bool extractArchive(const QString &archivePath, const QString &outputDirectoryPath, Format format, ProgressCallback progress, qint64 maxDecompressedBytes)
bool decompressFile(const QString &inputPath, const QString &outputPath, Format format, ProgressCallback progress, qint64 maxDecompressedBytes)
bool isArchiveFile(const QString &filePath)
Check if file path indicates an archive file (.zip, .tar, .tar.gz, etc.)
std::function< bool(const ArchiveEntry &entry)> EntryFilter
bool looksLikeCompressedData(const QByteArray &data)
QByteArray uncompressData(const QByteArray &data, qint64 maxDecompressedSize)
int lastCompressionRatio()
Compression ratio from the last compressData() call (thread-local, percentage of original size).
QByteArray compressData(const QByteArray &data, CompressionLevel level, int minSize)
QStringList listArchive(const QString &archivePath, Format format)
bool extractArchiveFiltered(const QString &archivePath, const QString &outputDirectoryPath, EntryFilter filter, ProgressCallback progress, qint64 maxDecompressedBytes)
bool isArchiveFormat(Format format)
Check if format is an archive (contains multiple files)
bool extractByPattern(const QString &archivePath, const QStringList &patterns, const QString &outputDirectoryPath, QStringList *extractedFiles, Format format)
Format detectFormatFromData(const QByteArray &data)
QString lastErrorString()
Get a human-readable error message from the last operation (thread-local)
QString strippedPath(const QString &filePath)
QString detectedFilterName()
bool isCompressedFile(const QString &filePath)
Check if file path indicates a compressed file (.gz, .xz, .zst)
QString errorName(Error error)
Get a human-readable name for an error code.
bool decompressFromDevice(QIODevice *device, const QString &outputPath, ProgressCallback progress, qint64 maxDecompressedBytes)
Format
Archive and compression format types (for decompression)
@ Auto
Auto-detect from file extension or magic bytes.
@ TAR_ZSTD
TAR + Zstandard (.tar.zst)
@ TAR_BZ2
TAR + BZip2 (.tar.bz2, .tbz2)
@ XZ
XZ/LZMA compression (single file, .xz)
@ ZIP
ZIP archive (multiple files)
@ TAR_XZ
TAR + XZ (.tar.xz, .txz)
@ SEVENZ
7-Zip archive (.7z)
@ TAR_LZ4
TAR + LZ4 (.tar.lz4)
@ BZIP2
BZip2 compression (single file, .bz2)
@ ZSTD
Zstandard compression (single file, .zst)
@ TAR_GZ
TAR + GZIP (.tar.gz, .tgz)
@ LZ4
LZ4 compression (single file, .lz4)
@ TAR
TAR archive (uncompressed, multiple files)
@ GZIP
GZIP compression (single file, .gz)
QByteArray extractFileData(const QString &archivePath, const QString &fileName, Format format)
QByteArray compress(const QByteArray &data, CompressionLevel level)
QByteArray uncompress(const QByteArray &data)
ArchiveStats getArchiveStats(const QString &archivePath, Format format)
QByteArray readFile(const QString &filePath, QString *errorString, qint64 maxBytes)
Read file contents, transparently decompressing .gz/.xz/.zst/.bz2/.lz4 files.
QList< ArchiveEntry > listArchiveDetailed(const QString &archivePath, Format format)
Error
Error codes for decompression operations.
@ FileNotFound
Input file does not exist.
@ FileNotInArchive
Requested file not found in archive.
@ PermissionDenied
Cannot read input or write output.
@ InvalidArchive
Archive is corrupt or invalid.
@ InternalError
Unexpected internal error.
@ Cancelled
Operation cancelled by progress callback.
@ SizeLimitExceeded
Decompressed size exceeded limit.
@ UnsupportedFormat
Format not recognized or not supported.
@ IoError
General I/O error (read/write failure)
QJsonDocument parseCompressedJson(const QByteArray &data, QJsonParseError *error)
Parse JSON from data that may be compressed. Auto-detects gzip/xz/zstd/bzip2/lz4.
bool validateArchive(const QString &archivePath, Format format)
bool extractFile(const QString &archivePath, const QString &fileName, const QString &outputPath, Format format)
Error lastError()
Get the error code from the last operation (thread-local)
bool isDataCompressed(const QByteArray &data)
Check if data has the compressed framing header.
bool extractFromDevice(QIODevice *device, const QString &outputDirectoryPath, ProgressCallback progress, qint64 maxDecompressedBytes)
QByteArray extractFileDataFromDevice(QIODevice *device, const QString &fileName)
bool extractFiles(const QString &archivePath, const QStringList &fileNames, const QString &outputDirectoryPath, Format format)
QString detectedFormatName()
QString decompressIfNeeded(const QString &filePath, const QString &outputPath, bool removeOriginal)
QString formatExtension(Format format)
Get file extension for a format.
Format detectFormatFromFile(const QString &filePath)
Format detectFormat(const QString &filePath, bool useContentFallback)