KArchive 5.109.0
karchive.h
1/* This file is part of the KDE libraries
2 SPDX-FileCopyrightText: 2000-2005 David Faure <faure@kde.org>
3 SPDX-FileCopyrightText: 2003 Leo Savernik <l.savernik@aon.at>
4
5 Moved from ktar.h by Roberto Teixeira <maragato@kde.org>
6
7 SPDX-License-Identifier: LGPL-2.0-or-later
8*/
9#ifndef KARCHIVE_H
10#define KARCHIVE_H
11
12#include <sys/stat.h>
13#include <sys/types.h>
14
15#include <QCoreApplication>
16#include <QDate>
17#include <QHash>
18#include <QIODevice>
19#include <QString>
20#include <QStringList>
21
22#include <karchive_export.h>
23
24#ifdef Q_OS_WIN
25#include <qplatformdefs.h> // mode_t
26#endif
27
29class KArchiveFile;
30
31class KArchivePrivate;
39class KARCHIVE_EXPORT KArchive
40{
41 Q_DECLARE_TR_FUNCTIONS(KArchive)
42
43protected:
50 KArchive(const QString &fileName);
51
59 KArchive(QIODevice *dev);
60
61public:
62 virtual ~KArchive();
63
70 virtual bool open(QIODevice::OpenMode mode);
71
79 virtual bool close();
80
85 QString errorString() const;
86
91 bool isOpen() const;
92
98 QIODevice::OpenMode mode() const;
99
104 QIODevice *device() const;
105
111 QString fileName() const;
112
119
130 bool addLocalFile(const QString &fileName, const QString &destName);
131
143 bool addLocalDirectory(const QString &path, const QString &destName);
144
160 bool writeDir(const QString &name,
161 const QString &user = QString(),
162 const QString &group = QString(),
163 mode_t perm = 040755,
164 const QDateTime &atime = QDateTime(),
165 const QDateTime &mtime = QDateTime(),
166 const QDateTime &ctime = QDateTime());
167
181 bool writeSymLink(const QString &name,
182 const QString &target,
183 const QString &user = QString(),
184 const QString &group = QString(),
185 mode_t perm = 0120755,
186 const QDateTime &atime = QDateTime(),
187 const QDateTime &mtime = QDateTime(),
188 const QDateTime &ctime = QDateTime());
189
190#if KARCHIVE_ENABLE_DEPRECATED_SINCE(5, 0)
195 KARCHIVE_DEPRECATED_VERSION(5,
196 0,
197 "Use KArchive::writeFile(const QString&, const QByteArray&, mode_t, const QString&, const QString&, const QDateTime&, const "
198 "QDateTime&, const QDateTime&)")
199 bool writeFile(const QString &name,
200 const QString &user,
201 const QString &group,
202 const char *data,
203 qint64 size,
204 mode_t perm = 0100644,
205 const QDateTime &atime = QDateTime(),
206 const QDateTime &mtime = QDateTime(),
207 const QDateTime &ctime = QDateTime())
208 {
209 QByteArray array(data, size);
210 return writeFile(name, array, perm, user, group, atime, mtime, ctime);
211 }
212 // The above can lead to ambiguous calls when using "..." for the first 4 arguments,
213 // but that's good, better than unexpected behavior due to the signature change.
214#endif
215
238 bool writeFile(const QString &name,
239 const QByteArray &data,
240 mode_t perm = 0100644,
241 const QString &user = QString(),
242 const QString &group = QString(),
243 const QDateTime &atime = QDateTime(),
244 const QDateTime &mtime = QDateTime(),
245 const QDateTime &ctime = QDateTime());
246
266 bool prepareWriting(const QString &name,
267 const QString &user,
268 const QString &group,
269 qint64 size,
270 mode_t perm = 0100644,
271 const QDateTime &atime = QDateTime(),
272 const QDateTime &mtime = QDateTime(),
273 const QDateTime &ctime = QDateTime());
274
278 virtual bool writeData(const char *data, qint64 size);
279
285 bool finishWriting(qint64 size);
286
287protected:
293 virtual bool openArchive(QIODevice::OpenMode mode) = 0;
294
299 virtual bool closeArchive() = 0;
300
306 void setErrorString(const QString &errorStr);
307
316
332 virtual bool doWriteDir(const QString &name,
333 const QString &user,
334 const QString &group,
335 mode_t perm,
336 const QDateTime &atime,
337 const QDateTime &mtime,
338 const QDateTime &ctime) = 0;
339
354 virtual bool doWriteSymLink(const QString &name,
355 const QString &target,
356 const QString &user,
357 const QString &group,
358 mode_t perm,
359 const QDateTime &atime,
360 const QDateTime &mtime,
361 const QDateTime &ctime) = 0;
362
378 virtual bool doPrepareWriting(const QString &name,
379 const QString &user,
380 const QString &group,
381 qint64 size,
382 mode_t perm,
383 const QDateTime &atime,
384 const QDateTime &mtime,
385 const QDateTime &ctime) = 0;
386
394 virtual bool doFinishWriting(qint64 size) = 0;
395
402 KArchiveDirectory *findOrCreate(const QString &path);
403
410 virtual bool createDevice(QIODevice::OpenMode mode);
411
416 void setDevice(QIODevice *dev);
417
423
424protected:
425 virtual void virtual_hook(int id, void *data);
426
427private:
428 friend class KArchivePrivate;
429 KArchivePrivate *const d;
430};
431
432// for source compat
433#include "karchivedirectory.h"
434#include "karchivefile.h"
435
436#endif
Represents a directory entry in a KArchive.
Definition karchivedirectory.h:33
Represents a file entry in a KArchive.
Definition karchivefile.h:25
KArchive is a base class for reading and writing archives.
Definition karchive.h:40
QString errorString() const
Returns a description of the last error.
QIODevice * device() const
The underlying device.
virtual bool createDevice(QIODevice::OpenMode mode)
Can be reimplemented in order to change the creation of the device (when using the fileName construct...
virtual bool doFinishWriting(qint64 size)=0
Called after writing the data.
bool addLocalFile(const QString &fileName, const QString &destName)
Writes a local file into the archive.
bool finishWriting(qint64 size)
Call finishWriting after writing the data.
virtual bool open(QIODevice::OpenMode mode)
Opens the archive for reading or writing.
KArchive(QIODevice *dev)
Base constructor (protected since this is a pure virtual class).
KArchive(const QString &fileName)
Base constructor (protected since this is a pure virtual class).
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.
virtual bool closeArchive()=0
Closes the archive.
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.
const KArchiveDirectory * directory() const
If an archive is opened for reading, then the contents of the archive can be accessed via this functi...
virtual bool close()
Closes the archive.
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.
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...
virtual bool openArchive(QIODevice::OpenMode mode)=0
Opens an archive for reading or writing.
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.
KArchiveDirectory * findOrCreate(const QString &path)
Ensures that path exists, create otherwise.
bool addLocalDirectory(const QString &path, const QString &destName)
Writes a local directory into the archive, including all its contents, recursively.
QIODevice::OpenMode mode() const
Returns the mode in which the archive was opened.
virtual bool writeData(const char *data, qint64 size)
Write data into the current file - to be called after calling prepareWriting.
QString fileName() const
The name of the archive file, as passed to the constructor that takes a fileName, or an empty string ...
void setRootDir(KArchiveDirectory *rootDir)
Derived classes call setRootDir from openArchive, to set the root directory after parsing an existing...
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 isOpen() const
Checks whether the archive is open.
virtual KArchiveDirectory * rootDir()
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.