QTemporaryFile Class
QTemporaryFile クラスは、一時ファイルを扱う I/O デバイスです。詳細...
| ヘッダー: | #include <QTemporaryFile> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: | QFile |
- 継承されたメンバーを含む、すべてのメンバーの一覧
- QTemporaryFile は、入出力およびネットワーク機能の一部です。
注:このクラスのすべての関数は再入可能です。
パブリック関数
| QTemporaryFile() | |
| QTemporaryFile(QObject *parent) | |
| QTemporaryFile(const QString &templateName) | |
| QTemporaryFile(const QString &templateName, QObject *parent) | |
(since 6.7) | QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr) |
| virtual | ~QTemporaryFile() |
| bool | autoRemove() const |
| QString | fileTemplate() const |
| bool | open() |
| bool | rename(const QString &newName) |
(since 6.7) bool | rename(const std::filesystem::path &newName) |
(since 6.11) bool | renameOverwrite(const QString &newName) |
(since 6.11) bool | renameOverwrite(const std::filesystem::path &newName) |
| void | setAutoRemove(bool b) |
| void | setFileTemplate(const QString &templateName) |
(since 6.7) void | setFileTemplate(const std::filesystem::path &name) |
再実装されたパブリック関数
| virtual QString | fileName() const override |
静的パブリック・メンバー
| QTemporaryFile * | createNativeFile(QFile &file) |
| QTemporaryFile * | createNativeFile(const QString &fileName) |
(since 6.7) QTemporaryFile * | createNativeFile(const std::filesystem::path &fileName) |
再実装された保護関数
| virtual bool | open(QIODeviceBase::OpenMode mode) 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.close() を呼び出した後に QTemporaryFile を再オープンしても安全です。QTemporaryFile オブジェクト自体が破棄されない限り、一意の一時ファイルは存在し続け、QTemporaryFile によって内部的に開かれたままに保たれます。
一時ファイルのファイル名は、fileName() を呼び出すことで取得できます。ただし、これはファイルが最初に開かれた後にのみ定義される点に注意してください。それ以前は、この関数は空の文字列を返します。
一時ファイルの名前には、固定部分と、一意になるよう計算された部分があります。 デフォルトのファイル名は、QCoreApplication::applicationName()(それ以外の場合はqt_temp )によって決定され、QDir::tempPath() が返す一時パスに配置されます。独自のファイル名を指定した場合、デフォルトでは相対ファイルパスは一時ディレクトリには配置されず、現在の作業ディレクトリを基準とした相対パスとなります。
rename() 関数が呼び出される場合は、正しいディレクトリを指定することが重要です。QTemporaryFile は、一時ファイル自体が作成されたのと同じボリューム/ファイルシステム内のファイルのみをリネームできるためです。
ファイル名(指定されたファイルテンプレートの最後のディレクトリパス区切り記号の後の部分)には、特殊なシーケンス"XXXXXX" (少なくとも 6 文字の大文字の"X" 文字)を含めることができます。これは、ファイル名の自動生成された部分に置き換えられます。ファイル名に"XXXXXX" が含まれていない場合、QTemporaryFile は生成された部分をファイル名に追加します。"XXXXXX" の最後の出現箇所のみが考慮されます。
QDir::tempPath() およびQFileも参照してください 。
メンバ関数のドキュメント
QTemporaryFile::QTemporaryFile()
QTemporaryFile を作成します。
デフォルトのファイル名テンプレートは、QCoreApplication::applicationName() によって返されるアプリケーション名(アプリケーション名が空の場合は"qt_temp" )に、".XXXXXX" が続く形式で決定されます。ファイルは、QDir::tempPath() によって返されるシステムの一時ディレクトリに保存されます。
setFileTemplate()、fileTemplate()、fileName()、およびQDir::tempPath()も参照してください 。
[explicit] QTemporaryFile::QTemporaryFile(QObject *parent)
指定されたparent を用いて、QTemporaryFileを構築します。
デフォルトのファイル名テンプレートは、QCoreApplication::applicationName() によって返されるアプリケーション名(アプリケーション名が空の場合は"qt_temp" )に、".XXXXXX" が続く形式で決定されます。ファイルは、QDir::tempPath() によって返されるシステムの一時ディレクトリに保存されます。
setFileTemplate()も参照してください 。
[explicit] QTemporaryFile::QTemporaryFile(const QString &templateName)
templateName をファイル名のテンプレートとして、QTemporaryFileを生成します。
一時ファイルを開く際、templateName を使用して一意のファイル名が生成されます。
ファイル名(templateName 内の最後のディレクトリパス区切り記号以降の部分)に"XXXXXX" が含まれていない場合、自動的に追加されます。
"XXXXXX" は、一意であると計算されたファイル名の動的部分に置き換えられます。
templateName が相対パスである場合、そのパスは現在の作業ディレクトリを基準とします。システムの一時ディレクトリを使用したい場合は、QDir::tempPath() を使用してtemplateName を構築することができます。
rename() 関数が呼び出される場合、正しいディレクトリを指定することが重要です。これは、QTemporaryFile が、一時ファイル自体が作成されたのと同じボリューム/ファイルシステム内でのみファイル名を変更できるためです。
open() およびfileTemplate()も参照してください 。
QTemporaryFile::QTemporaryFile(const QString &templateName, QObject *parent)
指定されたparent と、ファイル名のテンプレートとしてtemplateName を使用して、QTemporaryFileを構築します。
一時ファイルを開く際、templateName を使用して一意のファイル名が生成されます。
ファイル名(templateName 内の最後のディレクトリパス区切り記号以降の部分)に"XXXXXX" が含まれていない場合、それが自動的に追加されます。
"XXXXXX" は、一意であると計算されたファイル名の動的部分に置き換えられます。
templateName が相対パスである場合、そのパスは現在の作業ディレクトリを基準とする相対パスとなります。 システムの一時ディレクトリを使用したい場合は、QDir::tempPath() を使用してtemplateName を構築することができます。rename() 関数が呼び出される場合、QTemporaryFile は一時ファイル自体が作成されたのと同じボリューム/ファイルシステム内でのみファイルの名前を変更できるため、正しいディレクトリを指定することが重要です。
open() およびfileTemplate()も参照してください 。
[explicit, since 6.7] QTemporaryFile::QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr)
これはオーバーロードされた関数です。
この関数は Qt 6.7 で導入されました。
[virtual noexcept] QTemporaryFile::~QTemporaryFile()
一時ファイルオブジェクトを破棄します。必要に応じてファイルは自動的に閉じられ、自動削除モードの場合はファイルが自動的に削除されます。
autoRemove()も参照してください 。
bool QTemporaryFile::autoRemove() const
QTemporaryFile が自動削除モードになっている場合、true を返します。自動削除モードでは、オブジェクトが破棄されるとファイル名がディスクから自動的に削除されます。これにより、QTemporaryFile オブジェクトをスタック上に作成し、データを格納し、読み取りを行い、関数の戻り時に自動的にクリーンアップを行うことが非常に簡単になります。
自動削除はデフォルトで有効になっています。
setAutoRemove() およびremove()も参照してください 。
[static] QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)
file がまだネイティブファイルでない場合、QDir::tempPath()内でQTemporaryFile が作成され、file の内容がそこにコピーされ、その一時ファイルへのポインタが返されます。file がすでにネイティブファイルである場合は、何も行わず、0 を返します。
例:
QFile f_pointer(":/resources/file.txt");
QTemporaryFile::createNativeFile(f_pointer); // Returns a pointer to a temporary file
QFile f0("/users/qt/file.txt");
QTemporaryFile::createNativeFile(f0); // Returns 0QFileInfo::isNativePath()も参照してください 。
[static] QTemporaryFile *QTemporaryFile::createNativeFile(const QString &fileName)
既存の `QFile ` オブジェクトではなく、指定された `fileName ` に対して動作します。
これはオーバーロードされた関数です。
[static, since 6.7] QTemporaryFile *QTemporaryFile::createNativeFile(const std::filesystem::path &fileName)
これはオーバーロードされた関数です。
この関数は Qt 6.7 で導入されました。
[override virtual] QString QTemporaryFile::fileName() const
QFile::fileName() const を再実装します。
QTemporaryFile オブジェクトを裏付ける完全かつ一意のファイル名を返します。この文字列は、QTemporaryFile が開かれる前はnullですが、開かれた後はfileTemplate()の値に加え、一意性を確保するための追加文字が含まれるようになります。
このメソッドによって返されるファイル名は、このオブジェクトの構築に使用された(またはsetFileTemplate()に渡された)ファイル名テンプレートが相対名か絶対名かによって、それぞれ相対名または絶対名となります。
fileTemplate()も参照してください 。
QString QTemporaryFile::fileTemplate() const
ファイル名のテンプレートを返します。
このメソッドによって返されるファイル名テンプレートは、このオブジェクトの構築に使用された(あるいは `setFileTemplate()` に渡された)ファイル名テンプレートが相対パスか絶対パスかによって、それぞれ相対パスまたは絶対パスとなります。
setFileTemplate()、fileName()、およびDefault File Name Templateも参照してください 。
bool QTemporaryFile::open()
ファイルシステム上に、QIODeviceBase::ReadWrite モードで一意の一時ファイルを開きます。ファイルのオープンに成功した場合、またはファイルがすでに開かれていた場合は、true を返します。それ以外の場合は、false を返します。
初めて呼び出された場合、open() はfileTemplate() に基づいて一意のファイル名を作成します。このファイルは、本関数によって確実に作成されたものであることが保証されます(つまり、それ以前に存在したことは一度もありません)。
close() の呼び出し後にファイルを再オープンした場合、同じファイルが再度開かれます。
setFileTemplate() およびQT_USE_NODISCARD_FILE_OPENも参照してください 。
[override virtual protected] bool QTemporaryFile::open(QIODeviceBase::OpenMode mode)
QFile::open (QIODeviceBase::OpenMode mode)を再実装します。
mode のフラグを使用して、ファイルシステム上に一意の一時ファイルを開きます。ファイルが正常に開かれた場合、またはすでに開かれていた場合は、true を返します。それ以外の場合は、false を返します。
初めて呼び出された場合、open() はfileTemplate() に基づいて一意のファイル名を作成し、mode フラグでそのファイルを開きます。このファイルは、本関数によって作成されたものであることが保証されます(つまり、それ以前は存在していなかったということです)。
close() の呼び出し後にファイルが再オープンされた場合、同じファイルがmode フラグで再度オープンされます。
setFileTemplate() およびQT_USE_NODISCARD_FILE_OPENも参照してください 。
bool QTemporaryFile::rename(const QString &newName)
現在の一時ファイルの名前を「newName 」に変更し、成功した場合はtrueを返します。
この関数は、QFile::rename() と比較して重要な違いがあります。ファイルの名前変更を行う低レベルのシステムコールが失敗した場合、コピーと削除は実行されません。これは、newName で、一時ファイルが作成されたボリュームやファイルシステムとは異なるボリュームやファイルシステム上のファイルが指定された場合に発生する可能性があります。つまり、QTemporaryFile はアトミックなファイル名変更のみをサポートしています。
この機能は、すべての内容がすでに存在する状態で宛先ファイルを生成することを目的としており、これにより、書き込み中の不完全なファイルを他のプロセスが参照することを防ぎます。QSaveFile クラスも同様の目的で使用できますが、特に宛先ファイルが一時ファイルでない場合に有効です。
注: rename()を呼び出しても 、autoRemove は無効化されません。名前変更後のファイルを永続化したい場合は、rename() を呼び出した後にsetAutoRemove を呼び出し、これをfalse に設定する必要があります。そうしないと、QTemporaryFile オブジェクトが破棄された際にファイルが削除されてしまいます。
newName がすでに存在する場合、この関数は失敗します。置き換えるには、代わりにrenameOverwrite()を使用してください。
関連項目: renameOverwrite()、QSaveFile 、QSaveFile::commit()、およびQFile::rename()。
[since 6.7] bool QTemporaryFile::rename(const std::filesystem::path &newName)
これはオーバーロードされた関数です。
この関数は Qt 6.7 で導入されました。
[since 6.11] bool QTemporaryFile::renameOverwrite(const QString &newName)
これは `rename()` と同じですが、QSaveFile::commit() と同様に、newName がすでに存在する場合、それをアトミックに置き換える点が異なります。
名前の変更をアトミックに実行できなかった場合(たとえば、一時ファイルと対象ファイル名が異なるファイルシステム/ボリューム/ドライブ上に存在する場合など)、false を返します。
この関数は Qt 6.11 で導入されました。
rename()、QSaveFile 、QSaveFile::commit()、およびQFile::rename()も参照してください 。
[since 6.11] bool QTemporaryFile::renameOverwrite(const std::filesystem::path &newName)
これはオーバーロードされた関数です。
この関数は Qt 6.11 で導入されました。
void QTemporaryFile::setAutoRemove(bool b)
b がtrue の場合、QTemporaryFile を自動削除モードに設定します。
自動削除はデフォルトで有効になっています。
このプロパティをfalse に設定する場合は、ファイルが不要になった際に、別のプロセスに処理を委ねるなど、アプリケーションがファイルを削除する手段を用意していることを確認してください。ファイル名を取得するには、常にfileName()関数を使用し、QTemporaryFile が生成したファイル名を推測しようとしないでください。
一部のシステムでは、ファイルを閉じる前に `fileName()` を呼び出さない場合、このプロパティの状態にかかわらず、一時ファイルが削除されることがあります。この動作を当てにすべきではないため、アプリケーションコードでは `fileName()` を呼び出すか、自動削除機能を有効にしておく必要があります。
autoRemove() およびremove()も参照してください 。
void QTemporaryFile::setFileTemplate(const QString &templateName)
ファイル名のテンプレートを「templateName 」に設定します。
ファイル名(templateName 内の最後のディレクトリパス区切り文字の後の部分)に"XXXXXX" が含まれていない場合、自動的に追加されます。
"XXXXXX" は、一意であると計算されたファイル名の動的部分に置き換えられます。
templateName が相対パスである場合、そのパスは現在の作業ディレクトリを基準とします。システムの一時ディレクトリを使用したい場合は、QDir::tempPath() を使用してtemplateName を構築できます。QTemporaryFile は、一時ファイル自体が作成されたのと同じボリューム / ファイルシステム内のファイルのみをリネームできるため、rename() 関数が呼び出される場合は、正しいディレクトリを指定することが重要です。
fileTemplate() およびfileName()も参照してください 。
[since 6.7] void QTemporaryFile::setFileTemplate(const std::filesystem::path &name)
これはオーバーロードされた関数です。
この関数は Qt 6.7 で導入されました。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.