QTemporaryFile Class

QTemporaryFileクラスは、一時ファイルを操作するI/Oデバイスです。詳細...

Header: #include <QTemporaryFile>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Inherits: QFile

メモ:このクラスの関数はすべてリエントラントです。

パブリック関数

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 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.

close() を呼び出した後に QTemporaryFile を再開することは安全です。QTemporaryFileオブジェクト自体が破棄されない限り、一意の一時ファイルは存在し、QTemporaryFileによって内部的にオープンされ続けます。

テンポラリ・ファイルのファイル名は、fileName ()を呼び出すことで見つけることができます。この関数は、それ以前に空の文字列を返します。

一時ファイルには、名前の静的な部分と、一意になるように計算された部分があります。デフォルトのファイル名は、QCoreApplication::applicationName() から決定され(そうでない場合はqt_temp )、QDir::tempPath() が返す一時パスに配置される。独自のファイル名を指定した場合、相対ファイル・パスはデフォルトではテンポラリ・ ディレクトリに配置されず、現在の作業ディレクトリからの相対パスとなる。

QTemporaryFile は、テンポラリ・ファイルが作成されたのと同じボリューム / ファイルシステム内のファイル名しか変更できないため、rename() 関数が呼び出される場合は、正しいディレクトリを指定することが重要です。

ファイル名(指定されたファイル・テンプレートの最後のディレクトリ・パス区切り文字の後の部分)には、"XXXXXX" (少なくとも6つの大文字の"X" )という特殊なシーケンスを含めることができ、ファイル名の自動生成部分で置き換えられます。ファイル名に"XXXXXX" が含まれていない場合、QTemporaryFile は生成された部分をファイル名に追加します。"XXXXXX" の最初の出現のみが考慮されます。

注意: Linux では、QTemporaryFile は名前のない一時ファイルの作成を試みます。これが成功すると、open ()はtrueを返しますが、exists ()はfalseになります。fileName() やそれを呼び出す関数を呼び出すと、QTemporaryFile はファイルに名前を付けるので、ほとんどのアプリケーションでは違いがわかりません。

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()

QTemporaryFile は常にQIODevice::ReadWriteモードでオープンされ、ファイル内のデータに簡単にアクセスできます。この関数は、成功すると true を返し、fileName() に使用された一意のファイル名を設定します。

fileName() およびQT_USE_NODISCARD_FILE_OPENも参照

[override virtual protected] bool QTemporaryFile::open(QIODeviceBase::OpenMode flags)

再インプリメント:QFile::open(QIODeviceBase::OpenMode mode).

テンポラリファイル用に一意のファイル名を作成し、それを開きます。後でfileName() を呼び出すことで、一意の名前を取得できます。このファイルは、この関数によって作成されたものであることが保証されます(つまり、それ以前に存在したことはありません)。

bool QTemporaryFile::rename(const QString &newName)

現在の一時ファイルの名前をnewName に変更し、成功すれば真を返す。

この関数は、QFile::rename ()と比較して重要な違いがある。それは、ファイル名を変更する低レベル・システム・コールに失敗した場合、コピー+削除を実行しないことである。これは、newName が、一時ファイルが作成されたボリュームやファイルシステムとは異なるボリュームやファイルシステムにあるファイルを指定した場合に起こりうることである。言い換えれば、QTemporaryFile はアトミックなファイル名変更のみをサポートする。

この機能は、すべてのコンテンツがすでに存在する状態で宛先ファイルを実体化することをサポートすることを意図しており、別のプロセスが書き込み中の不完全なファイルを見ることはできません。QSaveFile クラスも、特に書き込み先ファイルが一時ファイルでない場合に、同様の目的で使用できる。

QSaveFileQSaveFile::commit()、QFile::rename()も参照の こと。

[since 6.7] bool QTemporaryFile::rename(const std::filesystem::path &newName)

これはオーバーロードされた関数です。

この関数はQt 6.7で導入されました。

void QTemporaryFile::setAutoRemove(bool b)

btrue の場合、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 で導入されました。

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。