QSaveFile Class
QSaveFile クラスは、ファイルへの安全な書き込みを行うためのインターフェースを提供します。詳細...
| ヘッダー: | #include <QSaveFile> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: | QFileDevice |
- 継承されたメンバーを含むすべてのメンバーの一覧
- QSaveFile は、入出力およびネットワーク機能の一部です。
注:このクラスのすべての関数は再入可能です。
パブリック関数
| QSaveFile(QObject *parent = nullptr) | |
| QSaveFile(const QString &name, QObject *parent = nullptr) | |
(since 6.11) | QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr) |
| virtual | ~QSaveFile() |
| void | cancelWriting() |
| bool | commit() |
| bool | directWriteFallback() const |
(since 6.11) std::filesystem::path | filesystemFileName() const |
| void | setDirectWriteFallback(bool enabled) |
| void | setFileName(const QString &name) |
(since 6.11) void | setFileName(const std::filesystem::path &name) |
再実装されたパブリック関数
| virtual QString | fileName() const override |
| virtual bool | open(QIODeviceBase::OpenMode mode) override |
(since 6.12) virtual QFileDevice::Permissions | permissions() const override |
(since 6.12) virtual bool | setPermissions(QFileDevice::Permissions permissions) override |
再実装された保護された関数
| virtual qint64 | writeData(const char *data, qint64 len) override |
詳細な説明
QSaveFile は、書き込み操作が失敗しても既存のデータを失うことなく、テキストファイルやバイナリファイルを書き込むための I/O デバイスです。
書き込み中は、内容が一時ファイルに書き込まれ、エラーが発生しなければ、commit() によって最終的なファイルへ移動されます。これにより、書き込み中にエラーが発生した場合でも、最終ファイルのデータが失われることはなく、また、部分的に書き込まれたファイルが最終的な保存先に残ることもありません。ドキュメント全体をディスクに保存する際は、常に QSaveFile を使用してください。
QSaveFileは、write()がすべてのバイトを書き込めない「パーティション容量不足」などの書き込みエラーを自動的に検出します。エラーが発生したことを記憶し、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, QObject *parent = nullptr)
指定されたparent を使用して、指定されたname を持つファイルを表す新しいファイルオブジェクトを作成します。
[since 6.11] QSaveFile::QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr)
指定されたparent を使用して、指定されたpath を持つファイルを表す新しいファイルオブジェクトを作成します。
この関数は Qt 6.11 で導入されました。
[virtual noexcept] QSaveFile::~QSaveFile()
commit() が呼び出されていない限り、ファイルオブジェクトを破棄し、保存されていた内容を破棄します。
void QSaveFile::cancelWriting()
新しいファイルへの書き込みをキャンセルします。
保存中にアプリケーションが考えを変えた場合は、cancelWriting() を呼び出すことができます。これによりエラーコードが設定され、commit() が一時ファイルを破棄するようになります。
あるいは、単にcommit()を呼び出さないようにすればよい。
このメソッドを呼び出した後も書き込み操作は可能ですが、いずれも効果はなく、書き込まれたファイルは破棄されます。
このメソッドは、ダイレクト書き込みのフォールバックが使用されている場合は効果がありません。これは、読み取り専用ディレクトリ内の既存のファイルの上書き保存を行う場合です。一時ファイルを作成できないため、どのような場合でも既存のファイルが上書きされ、cancelWriting() ではこれを防ぐことはできず、既存のファイルの内容は失われてしまいます。
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()も参照してください 。
[since 6.11] std::filesystem::path QSaveFile::filesystemFileName() const
fileName() をstd::filesystem::path として返します。
この関数は Qt 6.11 で導入されました。
[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も参照してください 。
[override virtual, since 6.12] QFileDevice::Permissions QSaveFile::permissions() const
QFileDevice::permissions() const を再実装します。
commit() が正常に実行された場合、そのファイルに付与される権限を報告します。
この関数は Qt 6.12 で導入されました。
setPermissions()も参照してください 。
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()も参照してください 。
[since 6.11] void QSaveFile::setFileName(const std::filesystem::path &name)
これはオーバーロードされた関数です。
この関数は Qt 6.11 で導入されました。
[override virtual, since 6.12] bool QSaveFile::setPermissions(QFileDevice::Permissions permissions)
QFileDevice::setPermissions (QFileDevice::Permissions の権限)を再実装しています。
commit() が成功した場合に、ファイルに付与されるpermissions を設定します。
QSaveFile 経由で書き込みが行われる際、ファイルのアクセス権はより制限的になる場合があります。
この関数は Qt 6.12 で導入されました。
permissions()も参照してください 。
[override virtual protected] qint64 QSaveFile::writeData(const char *data, qint64 len)
QFileDevice::writeData (const char *data, qint64 len)を再実装します。
© 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.