QSaveFile Class
QSaveFile クラスは、ファイルに安全に書き込むためのインターフェイスを提供します。詳細...
ヘッダ | #include <QSaveFile> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
継承: | QFileDevice |
- 継承メンバを含む全メンバのリスト
- QSaveFileは、Input/OutputおよびNetworkingに属しています。
注意:このクラスの関数はすべてリエントラントです。
パブリック関数
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 qint64 | writeData(const char *data, qint64 len) override |
詳細説明
QSaveFileは、テキストファイルやバイナリファイルを書き込むためのI/Oデバイスです。
書き込み中、内容は一時ファイルに書き込まれ、エラーが発生しなければ、commit ()が最終ファイルに移動します。これにより、書き込み中にエラーが発生しても最終ファイルのデータが失われることはなく、最終的な場所に部分的に書き込まれたファイルが存在することもありません。文書全体をディスクに保存する場合は、常にQSaveFileを使用してください。
QSaveFileは、write()がすべてのバイトを書き込めないフルパーティションの状況など、書き込み中のエラーを自動的に検出します。QSaveFile はエラーが発生したことを記憶し、commit() の一時ファイルを破棄します。
QFile と同様に、ファイルはopen() でオープンされる。データの読み書きは通常、QDataStream またはQTextStream を使用するが、write() を直接呼び出すこともできる。
QFile と異なり、close() を呼び出すことはできない。commit() がそれに代わる。commit() が呼び出されず、QSaveFile インスタンスが破棄された場合、一時ファイルは破棄されます。
アプリケーション・エラーによって保存を中止するには、cancelWriting() を呼び出します。そうすれば、後でcommit() を呼び出しても保存されません。
QTextStream 、QDataStream 、QFileInfo 、QDir 、QFile 、QTemporaryFileも参照のこと 。
メンバー関数ドキュメント
[explicit]
QSaveFile::QSaveFile(QObject *parent = nullptr)
与えられたparent で新しいファイル・オブジェクトを構築する。open() の前にsetFileName() を呼び出す必要がある。
[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()をコールしてエラー・コードを設定し、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) を再実装します。
mode フラグを使用してファイルを開きます。成功すればtrue
を返し、そうでなければfalse
を返します。
重要:mode のフラグにはQIODeviceBase::WriteOnly を含める必要があります。その他の一般的なフラグとしては、Text およびUnbuffered があります。現在サポートされていないフラグは、ReadOnly (したがってReadWrite )、Append 、NewOnly 、ExistingOnly である。
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).
© 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.