Spec-Zone.ru › Qt 6.1

Класс 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).

Открывает файл с использованием OpenMode 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.1/qsavefile.html

Spec-Zone.ru

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