Spec-Zone.ru › Qt 6.0

Класс QSaveFile

Класс QSaveFile предоставляет интерфейс для безопасного записи в файлы. Подробнее...

Заголовок: #include <QSaveFile>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
С тех пор: Qt 5.1
Наследует: QFileDevice
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются повторно входящими.

Открытые функции

QSaveFile(const QString &name, QObject *parent)
QSaveFile(QObject *parent = nullptr)
QSaveFile(const QString &name)
virtual ~QSaveFile()
void cancelWriting()
bool commit()
bool directWriteFallback() const
void setDirectWriteFallback(bool enabled)
void setFileName(const QString &name)

Переопределённые открытые функции

virtual QString fileName() const override
virtual bool open(QIODeviceBase::OpenMode mode) override

Переопределённые защищённые функции

virtual qint64 writeData(const char *data, qint64 len) override

Подробное описание

QSaveFile — это устройство ввода-вывода для записи текстовых и бинарных файлов без потери существующих данных в случае сбоя операции записи.

Во время записи содержимое будет записано во временный файл, и если ошибок не произошло, commit() переместит его в конечный файл. Это гарантирует, что данные в конечном файле не потеряются в случае ошибки во время записи, и никогда не будет присутствовать частично записанный файл в конечном местоположении. Всегда используйте QSaveFile при сохранении полных документов на диск.

QSaveFile автоматически обнаруживает ошибки при записи, такие как ситуация заполненного раздела, где write() не может записать все байты. Он запомнит, что произошла ошибка, и удалит временный файл в commit().

Подобно QFile, файл открывается с помощью open(). Данные обычно считываются и записываются с помощью QDataStream или QTextStream, но вы также можете вызвать унаследованные от QIODevice функции read(), readLine(), readAll(), write().

В отличие от QFile, вызов close() запрещён. commit() заменяет его. Если commit() не был вызван, и экземпляр QSaveFile уничтожен, временный файл удаляется.

Чтобы прервать сохранение из-за ошибки приложения, вызовите cancelWriting(), чтобы даже вызов commit() позже не сохранил.

См. также QTextStream, QDataStream, QFileInfo, QDir, QFile и QTemporaryFile.

Документация по членам-функциям

QSaveFile::QSaveFile(const QString &name, QObject *parent)

Создаёт новый объект файла с заданным parent для представления файла с указанным name.

QSaveFile::QSaveFile(QObject *parent = nullptr)

Создаёт новый объект файла с заданным parent.

QSaveFile::QSaveFile(const QString &name)

Создаёт новый объект файла для представления файла с указанным name.

[virtual] QSaveFile::~QSaveFile()

Уничтожает объект файла, удаляя сохранённое содержимое, если commit() не был вызван.

void QSaveFile::cancelWriting()

Отменяет запись нового файла.

Если приложение меняет решение во время сохранения, оно может вызвать cancelWriting(), которое устанавливает код ошибки, чтобы commit() удалил временный файл.

В качестве альтернативы можно просто убедиться, что не вызывается commit().

После вызова этого метода возможны дальнейшие операции записи, но они не повлияют ни на что; записанный файл будет удалён.

Этот метод не имеет эффекта при использовании отката прямой записи. Это имеет место при сохранении поверх существующего файла в каталоге только для чтения: временный файл создать нельзя, поэтому существующий файл перезаписывается независимо ни от чего, и cancelWriting() не может повлиять на это; содержимое существующего файла будет потеряно.

См. также commit().

bool QSaveFile::commit()

Сохраняет изменения на диск, если все предыдущие записи были выполнены успешно.

Вызов этой функции обязателен в конце операции сохранения, иначе файл будет удалён.

Если во время записи произошла ошибка, удаляет временный файл и возвращает false. В противном случае переименовывает его в конечный fileName и возвращает true в случае успеха. Наконец, закрывает устройство.

См. также cancelWriting().

bool QSaveFile::directWriteFallback() const

Возвращает true если откат для сохранения файлов в каталогах только для чтения включен.

См. также setDirectWriteFallback().

[override virtual] QString QSaveFile::fileName() const

Переопределяет: QFileDevice::fileName() const.

Возвращает имя, заданное setFileName() или в конструкторе QSaveFile.

См. также setFileName().

[override virtual] bool QSaveFile::open(QIODeviceBase::OpenMode mode)

Переопределяет: QIODevice::open(QIODeviceBase::OpenMode mode).

Открывает файл с помощью mode, возвращая true в случае успеха; иначе false.

Важно: mode должен включать QIODevice::WriteOnly. Он также может иметь дополнительные флаги, такие как QIODevice::Text и QIODevice::Unbuffered.

QIODevice::ReadWrite, QIODevice::Append, QIODevice::NewOnly и QIODevice::ExistingOnly в данный момент не поддерживаются.

См. также QIODevice::OpenMode и setFileName().

void QSaveFile::setDirectWriteFallback(bool enabled)

Позволяет перезаписывать существующий файл при необходимости.

QSaveFile создаёт временный файл в том же каталоге, что и конечный файл, и атомарно переименовывает его. Однако это невозможно, если разрешения каталога не позволяют создавать новые файлы. Для обеспечения гарантии атомарности, open() завершается неудачей, если не может создать временный файл.

Чтобы позволить пользователям редактировать файлы с правами записи в каталоге с ограниченными правами, вызовите setDirectWriteFallback() с enabled, установленным в true, и последующие вызовы open() будут обращаться к открытию существующего файла напрямую и записи в него без использования временного файла. Это не гарантирует атомарность, т. е. сбой приложения или, например, отключение питания может привести к частично записанному файлу на диске. Это также означает, что cancelWriting() не имеет эффекта в таком случае.

Обычно, для сохранения документов, отредактированных пользователем, вызовите setDirectWriteFallback(true), а для сохранения внутренних файлов приложения (файлы конфигурации, данные и т. д.) оставьте значение по умолчанию, которое гарантирует атомарность.

См. также directWriteFallback().

void QSaveFile::setFileName(const QString &name)

Устанавливает имя файла. Имя может быть без пути, относительным путём или абсолютным путём.

См. также QFile::setFileName() и fileName().

[override virtual protected] qint64 QSaveFile::writeData(const char *data, qint64 len)

Переопределяет: QFileDevice::writeData(const char *data, qint64 len).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qsavefile.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API