Класс QTemporaryFile
Класс QTemporaryFile представляет собой устройство ввода-вывода, работающее с временными файлами. Подробнее...
| Заголовок: | #include <QTemporaryFile> |
| qmake: | QT += core |
| Наследует: | QFile |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QTemporaryFile(const QString &templateName, QObject *parent) | |
| QTemporaryFile(QObject *parent) | |
| QTemporaryFile(const QString &templateName) | |
| QTemporaryFile() | |
| virtual | ~QTemporaryFile() |
| bool | autoRemove() const |
| QString | fileTemplate() const |
| bool | open() |
| void | setAutoRemove(bool b) |
| void | setFileTemplate(const QString &name) |
Переопределенные открытые функции
| virtual QString | fileName() const override |
Статические открытые члены
| QTemporaryFile * | createNativeFile(QFile &file) |
| QTemporaryFile * | createNativeFile(const QString &fileName) |
Переопределенные защищенные функции
| virtual bool | open(QIODevice::OpenMode flags) override |
Подробное описание
Класс QTemporaryFile используется для безопасного создания уникальных временных файлов. Сам файл создается при вызове open(). Имя временного файла гарантированно будет уникальным (т.е. вы гарантированно не перезапишете существующий файл), и файл будет удалён при уничтожении объекта QTemporaryFile. Это важная техника, которая предотвращает повреждение данных для приложений, хранящих данные во временных файлах. Имя файла генерируется автоматически или создаётся на основе шаблона, переданного в конструктор QTemporaryFile.
Пример:
// Within a function/method...
QTemporaryFile file;
if (file.open()) {
// file.fileName() returns the unique file name
}
// The QTemporaryFile destructor removes the temporary file
// as it goes out of scope. Переоткрытие QTemporaryFile после вызова close() безопасно. Пока объект QTemporaryFile не уничтожен, уникальный временный файл существует и внутренне удерживается открытым объектом QTemporaryFile.
Имя временного файла можно найти, вызвав fileName(). Обратите внимание, что это определено только после первого открытия файла; функция возвращает пустую строку до этого.
Временный файл будет иметь статическую часть имени и часть, рассчитанную для уникальности. Имя файла по умолчанию определяется из QCoreApplication::applicationName() (иначе qt_temp) и будет размещено в временном пути, возвращаемом QDir::tempPath(). Если вы укажете своё собственное имя файла, относительный путь к файлу по умолчанию не будет помещён в временную директорию, а будет относительным к текущей рабочей директории.
Указанные имена файлов могут содержать следующий шаблон XXXXXX (шесть заглавных букв "X"), который будет заменён автоматически сгенерированной частью имени файла. Обратите внимание, что шаблон чувствителен к регистру. Если шаблон отсутствует в имени файла, QTemporaryFile добавляет сгенерированную часть к заданному имени файла.
Примечание: В Linux QTemporaryFile попытается создать безымянный временный файл. Если это удастся, open() вернёт true, но exists() вернёт false. Если вы вызываете fileName() или любую функцию, которая её вызывает, QTemporaryFile даст файлу имя, поэтому большинство приложений не заметят разницы.
См. также QDir::tempPath() и QFile.
Документация по функциям-членам
QTemporaryFile::QTemporaryFile(const QString &templateName, QObject *parent)
Конструирует QTemporaryFile с именем шаблона файла templateName и указанным parent. При открытии временного файла это будет использоваться для создания уникального имени файла.
Если templateName не содержит XXXXXX, оно будет автоматически добавлено и использовано как динамическая часть имени файла.
Если templateName — относительный путь, путь будет относительным к текущей рабочей директории. Вы можете использовать QDir::tempPath() для построения templateName, если хотите использовать системную временную директорию.
См. также open() и fileTemplate().
QTemporaryFile::QTemporaryFile(QObject *parent)
Конструирует QTemporaryFile (с заданным parent) с использованием имени шаблона файла, полученного от QCoreApplication::applicationName() (иначе qt_temp) со следующим ".XXXXXX". Файл хранится в системной временной директории, QDir::tempPath().
См. также setFileTemplate().
QTemporaryFile::QTemporaryFile(const QString &templateName)
Конструирует QTemporaryFile с именем шаблона файла templateName. При открытии временного файла это будет использоваться для создания уникального имени файла.
Если templateName не содержит XXXXXX, оно будет автоматически добавлено и использовано как динамическая часть имени файла.
Если templateName — относительный путь, путь будет относительным к текущей рабочей директории. Вы можете использовать QDir::tempPath() для построения templateName, если хотите использовать системную временную директорию.
См. также open() и fileTemplate().
QTemporaryFile::QTemporaryFile()
Конструирует QTemporaryFile, используя имя шаблона файла, полученное от QCoreApplication::applicationName() (иначе qt_temp) со следующим ".XXXXXX". Файл хранится в системной временной директории, QDir::tempPath().
См. также setFileTemplate() и QDir::tempPath().
[virtual] QTemporaryFile::~QTemporaryFile()
Уничтожает объект временного файла, файл автоматически закрывается при необходимости, и если режим автоматического удаления включён, файл автоматически удаляется.
См. также autoRemove().
bool QTemporaryFile::autoRemove() const
Возвращает true, если QTemporaryFile находится в режиме автоматического удаления. Режим автоматического удаления автоматически удалит файл при уничтожении. Это упрощает создание объекта QTemporaryFile на стеке, заполнение данными, чтение из него и, наконец, при возвращении из функции, он автоматически очистит за собой.
Автоматическое удаление включено по умолчанию.
См. также setAutoRemove() и remove().
[static] QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)
Если file не является уже родным файлом, тогда создаётся QTemporaryFile в QDir::tempPath(), содержимое file копируется в него, и возвращается указатель на временный файл. Ничего не делает и возвращает 0 если file уже является родным файлом.
Например:
QFile f(":/resources/file.txt");
QTemporaryFile::createNativeFile(f); // Returns a pointer to a temporary file
QFile f("/users/qt/file.txt");
QTemporaryFile::createNativeFile(f); // Returns 0 См. также QFileInfo::isNativePath().
[static] QTemporaryFile *QTemporaryFile::createNativeFile(const QString &fileName)
Это перегруженная функция.
Работает с заданным именем файла (fileName) вместо существующего объекта QFile.
[override virtual] QString QTemporaryFile::fileName() const
Переопределяет: QFile::fileName() const.
Возвращает полное уникальное имя файла, используемого объектом QTemporaryFile. Это строка равна null до открытия QTemporaryFile, после чего она будет содержать fileTemplate() плюс дополнительные символы для обеспечения уникальности.
См. также fileTemplate().
QString QTemporaryFile::fileTemplate() const
Возвращает установленный шаблон имени файла. По умолчанию шаблон будет называться qcoreappname.XXXXXX и будет размещен в QDir::tempPath().
См. также setFileTemplate().
bool QTemporaryFile::open()
Объект QTemporaryFile всегда открывается в режиме QIODevice::ReadWrite, что обеспечивает легкий доступ к данным в файле. Эта функция вернёт true при успешном открытии и установит fileName() в уникальное имя файла.
См. также fileName().
[override virtual protected] bool QTemporaryFile::open(QIODevice::OpenMode flags)
Переопределяет: QFile::open(QIODevice::OpenMode mode).
Создаёт уникальное имя файла для временного файла и открывает его. Уникальное имя можно получить позднее, вызвав fileName(). Файл гарантированно создан этой функцией (т.е. он никогда ранее не существовал).
void QTemporaryFile::setAutoRemove(bool b)
Устанавливает режим автоматического удаления файла QTemporaryFile, если b равно true.
Режим автоматического удаления включен по умолчанию.
Если вы установите это свойство в значение false, убедитесь, что приложение предоставляет способ удалить файл, когда он больше не нужен, включая передачу ответственности другому процессу. Всегда используйте функцию fileName() для получения имени и никогда не пытайтесь угадать имя, сгенерированное QTemporaryFile.
В некоторых системах, если fileName() не вызывается до закрытия файла, временный файл может быть удален независимо от состояния этого свойства. Не стоит полагаться на это поведение, поэтому код приложения должен либо вызвать fileName(), либо оставить функциональность автоматического удаления включенной.
См. также autoRemove() и remove().
void QTemporaryFile::setFileTemplate(const QString &name)
Устанавливает статическую часть имени файла в name. Если шаблон имени файла содержит XXXXXX, он будет автоматически заменён уникальной частью имени файла, в противном случае имя файла будет определено автоматически на основе указанной статической части.
Если name содержит относительный путь к файлу, путь будет относительным к текущей рабочей директории. Вы можете использовать QDir::tempPath() для построения name, если хотите использовать системную временную директорию.
См. также fileTemplate().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qtemporaryfile.html