Spec-Zone.ru › Qt 5.6

Класс QSaveFile

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

Заголовок: #include <QSaveFile>
qmake: QT += core
С момента: Qt 5.1
Наследует: QFileDevice
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются реентерабельными.

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

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

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

virtual QString fileName() const
virtual bool open(OpenMode mode)
  • 16 открытых функций унаследовано от QFileDevice
  • 33 открытых функций унаследовано от QIODevice
  • 31 открытых функций унаследовано от QObject

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

virtual qint64 writeData(const char *data, qint64 len)
  • 3 защищённых функций унаследовано от QFileDevice
  • 5 защищённых функций унаследовано от QIODevice
  • 9 защищённых функций унаследовано от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследован от QObject
  • 4 сигнала унаследовано от QIODevice
  • 2 сигнала унаследовано от QObject
  • 11 статических открытых членов унаследовано от QObject
  • 3 защищённых функций унаследовано от QFileDevice
  • 5 защищённых функций унаследовано от QIODevice
  • 9 защищённых функций унаследовано от QObject

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

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

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)

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

QSaveFile::QSaveFile(QObject *parent = Q_NULLPTR)

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

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

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

QSaveFile::~QSaveFile()

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

void QSaveFile::cancelWriting()

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

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

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

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

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

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

bool QSaveFile::commit()

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

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

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

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

bool QSaveFile::directWriteFallback() const

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

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

[virtual] QString QSaveFile::fileName() const

Переопределено из QFileDevice::fileName().

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

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

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

Переопределено из QIODevice::open().

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

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

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

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

void QSaveFile::setDirectWriteFallback(bool enabled)

Разрешает перезапись существующего файла при необходимости.

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

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

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

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

void QSaveFile::setFileName(const QString &name)

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

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

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

Переопределено из QIODevice::writeData().

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

Spec-Zone.ru

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