Spec-Zone.ru › Qt 5.9

Класс 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
  • 43 открытых функций, унаследованных от QIODevice
  • 32 открытых функций, унаследованных от QObject

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

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

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

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

Открывает файл с помощью mode OpenMode, возвращает 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/qt-5.9/qsavefile.html

Spec-Zone.ru

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