KArchive 5.109.0
Public Member Functions | Protected Member Functions | List of all members
KTar

A class for reading / writing (optionally compressed) tar archives. More...

#include <KTar>

Public Member Functions

 KTar (const QString &filename, const QString &mimetype=QString())
 Creates an instance that operates on the given filename using the compression filter associated to given mimetype.
 
 KTar (QIODevice *dev)
 Creates an instance that operates on the given device.
 
 ~KTar () override
 If the tar ball is still opened, then it will be closed automatically by the destructor.
 
void setOrigFileName (const QByteArray &fileName)
 Special function for setting the "original file name" in the gzip header, when writing a tar.gz file.
 
- Public Member Functions inherited from KArchive
bool addLocalDirectory (const QString &path, const QString &destName)
 Writes a local directory into the archive, including all its contents, recursively.
 
bool addLocalFile (const QString &fileName, const QString &destName)
 Writes a local file into the archive.
 
virtual bool close ()
 Closes the archive.
 
QIODevice * device () const
 The underlying device.
 
const KArchiveDirectorydirectory () const
 If an archive is opened for reading, then the contents of the archive can be accessed via this function.
 
QString errorString () const
 Returns a description of the last error.
 
QString fileName () const
 The name of the archive file, as passed to the constructor that takes a fileName, or an empty string if you used the QIODevice constructor.
 
bool finishWriting (qint64 size)
 Call finishWriting after writing the data.
 
bool isOpen () const
 Checks whether the archive is open.
 
QIODevice::OpenMode mode () const
 Returns the mode in which the archive was opened.
 
virtual bool open (QIODevice::OpenMode mode)
 Opens the archive for reading or writing.
 
bool prepareWriting (const QString &name, const QString &user, const QString &group, qint64 size, mode_t perm=0100644, const QDateTime &atime=QDateTime(), const QDateTime &mtime=QDateTime(), const QDateTime &ctime=QDateTime())
 Here's another way of writing a file into an archive: Call prepareWriting(), then call writeData() as many times as wanted then call finishWriting( totalSize ).
 
virtual bool writeData (const char *data, qint64 size)
 Write data into the current file - to be called after calling prepareWriting.
 
bool writeDir (const QString &name, const QString &user=QString(), const QString &group=QString(), mode_t perm=040755, const QDateTime &atime=QDateTime(), const QDateTime &mtime=QDateTime(), const QDateTime &ctime=QDateTime())
 If an archive is opened for writing then you can add new directories using this function.
 
bool writeFile (const QString &name, const QByteArray &data, mode_t perm=0100644, const QString &user=QString(), const QString &group=QString(), const QDateTime &atime=QDateTime(), const QDateTime &mtime=QDateTime(), const QDateTime &ctime=QDateTime())
 Writes a new file into the archive.
 
bool writeFile (const QString &name, const QString &user, const QString &group, const char *data, qint64 size, mode_t perm=0100644, const QDateTime &atime=QDateTime(), const QDateTime &mtime=QDateTime(), const QDateTime &ctime=QDateTime())
 
bool writeSymLink (const QString &name, const QString &target, const QString &user=QString(), const QString &group=QString(), mode_t perm=0120755, const QDateTime &atime=QDateTime(), const QDateTime &mtime=QDateTime(), const QDateTime &ctime=QDateTime())
 Writes a symbolic link to the archive if supported.
 

Protected Member Functions

bool closeArchive () override
 Closes the archive.
 
bool createDevice (QIODevice::OpenMode mode) override
 Can be reimplemented in order to change the creation of the device (when using the fileName constructor).
 
bool doFinishWriting (qint64 size) override
 Reimplemented from KArchive.
 
bool doPrepareWriting (const QString &name, const QString &user, const QString &group, qint64 size, mode_t perm, const QDateTime &atime, const QDateTime &mtime, const QDateTime &ctime) override
 Reimplemented from KArchive.
 
bool doWriteDir (const QString &name, const QString &user, const QString &group, mode_t perm, const QDateTime &atime, const QDateTime &mtime, const QDateTime &ctime) override
 Reimplemented from KArchive.
 
bool doWriteSymLink (const QString &name, const QString &target, const QString &user, const QString &group, mode_t perm, const QDateTime &atime, const QDateTime &mtime, const QDateTime &ctime) override
 Reimplemented from KArchive.
 
bool openArchive (QIODevice::OpenMode mode) override
 Opens the archive for reading.
 
void virtual_hook (int id, void *data) override
 
- Protected Member Functions inherited from KArchive
 KArchive (const QString &fileName)
 Base constructor (protected since this is a pure virtual class).
 
 KArchive (QIODevice *dev)
 Base constructor (protected since this is a pure virtual class).
 
virtual bool closeArchive ()=0
 Closes the archive.
 
virtual bool createDevice (QIODevice::OpenMode mode)
 Can be reimplemented in order to change the creation of the device (when using the fileName constructor).
 
virtual bool doFinishWriting (qint64 size)=0
 Called after writing the data.
 
virtual bool doPrepareWriting (const QString &name, const QString &user, const QString &group, qint64 size, mode_t perm, const QDateTime &atime, const QDateTime &mtime, const QDateTime &ctime)=0
 This virtual method must be implemented by subclasses.
 
virtual bool doWriteDir (const QString &name, const QString &user, const QString &group, mode_t perm, const QDateTime &atime, const QDateTime &mtime, const QDateTime &ctime)=0
 Write a directory to the archive.
 
virtual bool doWriteSymLink (const QString &name, const QString &target, const QString &user, const QString &group, mode_t perm, const QDateTime &atime, const QDateTime &mtime, const QDateTime &ctime)=0
 Writes a symbolic link to the archive.
 
KArchiveDirectoryfindOrCreate (const QString &path)
 Ensures that path exists, create otherwise.
 
virtual bool openArchive (QIODevice::OpenMode mode)=0
 Opens an archive for reading or writing.
 
virtual KArchiveDirectoryrootDir ()
 Retrieves or create the root directory.
 
void setDevice (QIODevice *dev)
 Can be called by derived classes in order to set the underlying device.
 
void setErrorString (const QString &errorStr)
 Sets error description.
 
void setRootDir (KArchiveDirectory *rootDir)
 Derived classes call setRootDir from openArchive, to set the root directory after parsing an existing archive.
 
virtual void virtual_hook (int id, void *data)
 

Detailed Description

A class for reading / writing (optionally compressed) tar archives.

KTar allows you to read and write tar archives, including those that are compressed using gzip, bzip2 or xz.

Author
Torben Weis weis@.nosp@m.kde..nosp@m.org, David Faure faure.nosp@m.@kde.nosp@m..org

Constructor & Destructor Documentation

◆ KTar() [1/2]

KTar::KTar ( const QString &  filename,
const QString &  mimetype = QString() 
)
explicit

Creates an instance that operates on the given filename using the compression filter associated to given mimetype.

Parameters
filenameis a local path (e.g. "/home/weis/myfile.tgz")
mimetype"application/gzip" (before 5.85: "application/x-gzip"), "application/x-bzip", "application/x-xz", "application/zstd" (since 5.82) Do not use application/x-compressed-tar or similar - you only need to specify the compression layer ! If the mimetype is omitted, it will be determined from the filename.

◆ KTar() [2/2]

KTar::KTar ( QIODevice *  dev)
explicit

Creates an instance that operates on the given device.

The device can be compressed (KCompressionDevice) or not (QFile, etc.).

Warning
Do not assume that giving a QFile here will decompress the file, in case it's compressed!
Parameters
devthe device to read from. If the source is compressed, the QIODevice must take care of decompression

◆ ~KTar()

KTar::~KTar ( )
override

If the tar ball is still opened, then it will be closed automatically by the destructor.

Member Function Documentation

◆ closeArchive()

bool KTar::closeArchive ( )
overrideprotectedvirtual

Closes the archive.

Called by close.

Implements KArchive.

◆ createDevice()

bool KTar::createDevice ( QIODevice::OpenMode  mode)
overrideprotectedvirtual

Can be reimplemented in order to change the creation of the device (when using the fileName constructor).

By default this method uses QSaveFile when saving, and a simple QFile on reading. This method is called by open().

Reimplemented from KArchive.

◆ doFinishWriting()

bool KTar::doFinishWriting ( qint64  size)
overrideprotectedvirtual

Reimplemented from KArchive.

Implements KArchive.

◆ doPrepareWriting()

bool KTar::doPrepareWriting ( const QString &  name,
const QString &  user,
const QString &  group,
qint64  size,
mode_t  perm,
const QDateTime &  atime,
const QDateTime &  mtime,
const QDateTime &  ctime 
)
overrideprotectedvirtual

Reimplemented from KArchive.

Implements KArchive.

◆ doWriteDir()

bool KTar::doWriteDir ( const QString &  name,
const QString &  user,
const QString &  group,
mode_t  perm,
const QDateTime &  atime,
const QDateTime &  mtime,
const QDateTime &  ctime 
)
overrideprotectedvirtual

Reimplemented from KArchive.

Implements KArchive.

◆ doWriteSymLink()

bool KTar::doWriteSymLink ( const QString &  name,
const QString &  target,
const QString &  user,
const QString &  group,
mode_t  perm,
const QDateTime &  atime,
const QDateTime &  mtime,
const QDateTime &  ctime 
)
overrideprotectedvirtual

Reimplemented from KArchive.

Implements KArchive.

◆ openArchive()

bool KTar::openArchive ( QIODevice::OpenMode  mode)
overrideprotectedvirtual

Opens the archive for reading.

Parses the directory listing of the archive and creates the KArchiveDirectory/KArchiveFile entries.

Parameters
modethe mode of the file

Implements KArchive.

◆ setOrigFileName()

void KTar::setOrigFileName ( const QByteArray &  fileName)

Special function for setting the "original file name" in the gzip header, when writing a tar.gz file.

It appears when using in the "file" command, for instance. Should only be called if the underlying device is a KCompressionDevice!

Parameters
fileNamethe original file name

◆ virtual_hook()

void KTar::virtual_hook ( int  id,
void *  data 
)
overrideprotectedvirtual

Reimplemented from KArchive.