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は、Input/OutputおよびNetworkingに含まれる。
注意:このクラスの関数はすべてリエントラントです。
パブリック関数
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) |
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() が返す一時パスに配置される。独自のファイル名を指定した場合、相対ファイル・パスはデフォルトではテンポラリ・ ディレクトリに配置されず、現在の作業ディレクトリからの相対パスとなる。
QTemporaryFile は、テンポラリ・ファイルが作成されたのと同じボリューム / ファイルシステム内のファイル名しか変更できないため、rename() 関数が呼び出される場合は、正しいディレクトリを指定することが重要です。
ファイル名(指定されたファイル・テンプレートの最後のディレクトリ・パス区切り文字の後の部分)には、"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 を構築することができる。
QTemporaryFile は、一時ファイルが作成されたのと同じボリューム / ファイルシステム内のファイル名しか変更できないため、rename() 関数を呼び出す場合は、正しいディレクトリを指定することが重要です。
open() およびfileTemplate()も参照してください 。
QTemporaryFile::QTemporaryFile(const QString &templateName, QObject *parent)
指定されたparent と、ファイル名テンプレートとしてtemplateName を持つ QTemporaryFile を構築します。
一時ファイルを開くと、templateName を使用して一意のファイル名が作成されます。
ファイル名(templateName の最後のディレクトリパス区切り文字の後の部分)に"XXXXXX"
が含まれていない場合は、自動的に追加されます。
"XXXXXX"
は、一意になるように計算されたファイル名の動的部分に置き換えられます。
templateName が相対パスの場合、パスは現在の作業ディレクトリからの相対パスになる。システムの一時ディレクトリを使用したい場合は、QDir::tempPath ()を使用してtemplateName を構築することができる。QTemporaryFile は、一時ファイルが作成されたのと同じボリューム / ファイルシステム内のファイル名しか変更できないため、rename() 関数を呼び出す場合は、正しいディレクトリを指定することが重要です。
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(":/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)
これはオーバーロードされた関数である。
既存の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 に変更し、成功した場合に真を返す。
この関数は、QFile::rename() と比較して重要な違いがある。ファイル名を変更する低レベル・システム・コールに失敗した場合、コピー+削除を実行しない。これは、newName が、一時ファイルが作成されたボリュームやファイルシステムとは異なるボリュームやファイルシステムにあるファイルを指定した場合に発生する可能性がある。言い換えれば、QTemporaryFile はアトミックなファイル名変更のみをサポートする。
この機能は、すべてのコンテンツがすでに存在する状態で宛先ファイルを実体化することをサポートすることを意図しており、別のプロセスが書き込み中の不完全なファイルを見ることはできません。QSaveFile クラスも、特に書き込み先ファイルが一時ファイルでない場合に、同様の目的で使用できる。
QSaveFile 、QSaveFile::commit()、QFile::rename()も参照の こと。
[since 6.7]
bool QTemporaryFile::rename(const std::filesystem::path &newName)
これはオーバーロードされた関数です。
この関数は Qt 6.7 で導入されました。
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 で導入されました。
© 2025 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.