Класс QTemporaryFile
Класс QTemporaryFile представляет собой устройство ввода-вывода, работающее с временными файлами. Подробнее...
| Заголовок: | #include <QTemporaryFile> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| 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(QIODeviceBase::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(QIODeviceBase::OpenMode flags)
Переопределяет: QFile::open(QIODeviceBase::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-6.1/qtemporaryfile.html