Класс 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
Переопределённые защищённые функции
| virtual qint64 | writeData(const char *data, qint64 len) override |
- 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 = 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.
Важно: mode должен включать QIODevice::WriteOnly. Он может также содержать дополнительные флаги, такие как QIODevice::Text и QIODevice::Unbuffered.
QIODevice::ReadWrite, QIODevice::Append, QIODevice::NewOnly и QIODevice::ExistingOnly в данный момент не поддерживаются.
END_OF_DOCUMENT_MARKERСм. также 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/archives/qt-5.11/qsavefile.html