QSaveFile Class

QSaveFile クラスは、ファイルに安全に書き込むためのインターフェイスを提供します。詳細...

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

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

パブリック関数

QSaveFile(QObject *parent = nullptr)
QSaveFile(const QString &name)
QSaveFile(const QString &name, QObject *parent)
virtual ~QSaveFile()
void cancelWriting()
bool commit()
bool directWriteFallback() const
void setDirectWriteFallback(bool enabled)
void setFileName(const QString &name)

再実装パブリック関数

virtual QString fileName() const override
virtual bool open(QIODeviceBase::OpenMode mode) override

再実装された保護された関数

virtual qint64 writeData(const char *data, qint64 len) override

詳細説明

QSaveFileは、テキストファイルやバイナリファイルを書き込むためのI/Oデバイスです。

書き込み中、内容は一時ファイルに書き込まれ、エラーが発生しなければ、commit ()が最終ファイルに移動します。これにより、書き込み中にエラーが発生しても最終ファイルのデータが失われることはなく、最終的な場所に部分的に書き込まれたファイルが存在することもありません。文書全体をディスクに保存する場合は、常にQSaveFileを使用してください。

QSaveFileは、write()がすべてのバイトを書き込めないフルパーティションの状況など、書き込み中のエラーを自動的に検出します。QSaveFile はエラーが発生したことを記憶し、commit() の一時ファイルを破棄します。

QFile と同様に、ファイルはopen() でオープンされる。データの読み取りと書き込みは通常、QDataStream またはQTextStream を使用するが、QIODevice から継承された関数read()、readLine()、readAll()、write() を呼び出すこともできる。

QFile とは異なり、close() を呼び出すことはできない。commit()がそれに代わる。commit() が呼び出されず、QSaveFile インスタンスが破棄された場合、一時ファイルは破棄されます。

アプリケーション・エラーによって保存を中止するには、cancelWriting() を呼び出します。そうすれば、後でcommit() を呼び出しても保存されません。

QTextStreamQDataStreamQFileInfoQDirQFileQTemporaryFileも参照のこと

メンバ関数 ドキュメント

[explicit] QSaveFile::QSaveFile(QObject *parent = nullptr)

与えられたparent で新しいファイル・オブジェクトを構築する。

[explicit] QSaveFile::QSaveFile(const QString &name)

与えられたname でファイルを表す新しいファイルオブジェクトを構築する。

[explicit] QSaveFile::QSaveFile(const QString &name, QObject *parent)

指定されたname のファイルを表す、指定されたparent を持つ新しいファイルオブジェクトを構築する。

[virtual noexcept] QSaveFile::~QSaveFile()

commit() が呼び出されていない限り、保存された内容を破棄してファイル・オブジェクトを破棄する。

void QSaveFile::cancelWriting()

新しいファイルの書き込みをキャンセルする。

アプリケーションは、保存中に気が変わった場合、cancelWriting() を呼び出すことができます。cancelWriting() はエラー・コードを設定し、commit() が一時ファイルを破棄するようにします。

あるいは、commit ()を呼び出さないようにすることもできる。

このメソッドを呼び出した後、さらに書き込み操作を行うことは可能だが、どの操作 も効果はなく、書き込まれたファイルは破棄される。

直接書き込みフォールバックが使用されている場合、このメソッドは何の効果も持たない。これは、読み込み専用ディレクトリにある既存のファイルを上書き保存する場合である。一時ファイルを作成することはできないので、既存のファイルは何があっても上書きされる。

commit()も参照

bool QSaveFile::commit()

以前の書き込みがすべて成功した場合、変更をディスクにコミットする。

保存操作の最後にこれをコールすることが必須である。

書き込み中にエラーが発生した場合は、一時ファイルを削除してfalse を返します。そうでない場合は、最終的なファイル名fileName に変更し、成功した場合はtrue を返す。最後に、デバイスを閉じる。

cancelWriting()も参照のこと

bool QSaveFile::directWriteFallback() const

読み取り専用ディレクトリにファイルを保存するフォールバック・ソリューションが有効な場合、true を返す。

setDirectWriteFallback()も参照

[override virtual] QString QSaveFile::fileName() const

再インプリメント:QFileDevice::fileName() const.

setFileName() あるいはQSaveFile コンストラクタで設定した名前を返します。

setFileName() も参照

[override virtual] bool QSaveFile::open(QIODeviceBase::OpenMode mode)

再インプリメント:QIODevice::open(QIODeviceBase::OpenMode mode)。

OpenModemode を使用してファイルを開き、成功すれば true を返し、失敗すれば false を返します。

重要:mode は QIODevice::WriteOnly を含んでいなければなりません。また、QIODevice::Text や QIODevice::Unbuffered などの追加フラグを持つこともできます。

QIODevice::ReadWrite、QIODevice::Append、QIODevice::NewOnly、QIODevice::ExistingOnlyは、今のところサポートされていません。

QIODevice::OpenMode,setFileName(),QT_USE_NODISCARD_FILE_OPENも参照してください

void QSaveFile::setDirectWriteFallback(bool enabled)

必要であれば、既存ファイルの上書き書き込みを許可します。

QSaveFile は、最終ファイルと同じディレクトリに一時ファイルを作成し、アトミックに名前を変更します。しかし、ディレクトリのパーミッションが新規ファイルの作成を許可していない場合、これは不可能である。アトミック性の保証を維持するため、 () は、一時ファイルを作成できない場合に失敗する。open

パーミッションが制限されているディレクトリで、ユーザが書き込みパーミッションでファイルを編集できるようにするには、enabled にtrueを設定してsetDirectWriteFallback()を呼び出す。open()への次の呼び出しは、一時ファイルを使用せずに、既存のファイルを直接開いて書き込むようにフォールバックする。つまり、アプリケーションのクラッシュや停電などによって、ディスク上のファイルが部分的に書き込まれる可能性がある。また、このような場合、cancelWriting() は何の効果も持たない。

通常、ユーザが編集したドキュメントを保存するには setDirectWriteFallback(true)を呼び出し、アプリケーションの内部ファイル(設定ファイル、データファイル、...)を保存するには、アトミック性を保証するデフォルト設定のままにしておきます。

directWriteFallback()も参照してください

void QSaveFile::setFileName(const QString &name)

ファイルのname を設定します。名前には、パスなし、相対パス、絶対パスを指定できます。

QFile::setFileName() およびfileName()も参照

[override virtual protected] qint64 QSaveFile::writeData(const char *data, qint64 len)

再実装:QFileDevice::writeData(const char *data, qint64 len)を参照してください。

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