Spec-Zone.ru › Qt 5.12

Класс QSaveFile

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

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

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

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

QSaveFile(const QString &name)
QSaveFile(QObject *parent = nullptr)
QSaveFile(const QString &name, QObject *parent)
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(QIODevice::OpenMode mode) override
  • 18 открытых функций, унаследованных от QFileDevice
  • 44 открытых функций, унаследованных от QIODevice
  • 32 открытых функций, унаследованных от QObject

Статические открытые члены

const QMetaObject staticMetaObject
  • 10 статических открытых членов, унаследованных от QObject

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

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

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

  • 1 свойство, унаследованное от QObject
  • 1 открытый слот, унаследованный от QObject
  • 6 сигналов, унаследованных от QIODevice
  • 2 сигнала, унаследованных от 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 = nullptr)

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

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

Создаёт новый объект файла с заданным parent, представляющий файл со специфицированным именем 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().

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

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

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

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

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

Важно: режим должен включать 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().

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

Spec-Zone.ru

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