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