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