QFileDevice Class
QFileDevice クラスは、オープン・ファイルからの読み込みと、オープン・ファイルへの書き込みのためのインターフェースを提供します。詳細...
ヘッダー | #include <QFileDevice> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
を継承する: | QIODevice |
によって継承される: |
- 継承されたメンバを含む、すべてのメンバの一覧
- QFileDeviceは、Input/OutputおよびNetworkingに属しています。
メモ:このクラスの関数はすべてリエントラントです。
パブリック・タイプ
enum | FileError { NoError, ReadError, WriteError, FatalError, ResourceError, …, CopyError } |
enum | FileHandleFlag { AutoCloseHandle, DontCloseHandle } |
flags | FileHandleFlags |
enum | FileTime { FileAccessTime, FileBirthTime, FileMetadataChangeTime, FileModificationTime } |
enum | MemoryMapFlag { NoOptions, MapPrivateOption } |
flags | MemoryMapFlags |
enum | Permission { ReadOwner, WriteOwner, ExeOwner, ReadUser, WriteUser, …, ExeOther } |
flags | Permissions |
パブリック関数
virtual | ~QFileDevice() |
QFileDevice::FileError | error() const |
virtual QString | fileName() const |
QDateTime | fileTime(QFileDevice::FileTime time) const |
bool | flush() |
int | handle() const |
uchar * | map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions) |
virtual QFileDevice::Permissions | permissions() const |
virtual bool | resize(qint64 sz) |
bool | setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime) |
virtual bool | setPermissions(QFileDevice::Permissions permissions) |
bool | unmap(uchar *address) |
void | unsetError() |
再実装パブリック関数
virtual bool | atEnd() const override |
virtual void | close() override |
virtual bool | isSequential() const override |
virtual qint64 | pos() const override |
virtual bool | seek(qint64 pos) override |
virtual qint64 | size() const override |
再実装された保護された関数
virtual qint64 | readData(char *data, qint64 len) override |
virtual qint64 | readLineData(char *data, qint64 maxlen) override |
virtual qint64 | writeData(const char *data, qint64 len) override |
マクロ
(since 6.8) | QT_NO_USE_NODISCARD_FILE_OPEN |
(since 6.8) | QT_USE_NODISCARD_FILE_OPEN |
詳細説明
QFileDevice は、テキストファイルやバイナリファイル、リソースを読み書きできる I/O デバイスの基本クラスです。QFile が主な機能を提供していますが、QFileDevice は、QFile やQSaveFile によってオープンされたファイルに対して実行できるすべての操作を提供することで、QSaveFile などの他のファイルデバイスと機能を共有するための基本クラスとして機能します。
メンバ型ドキュメント
enum QFileDevice::FileError
この列挙型は、error() 関数によって返される可能性のあるエラーを記述する。
定数 | 値 | 説明 |
---|---|---|
QFileDevice::NoError | 0 | エラーは発生しませんでした。 |
QFileDevice::ReadError | 1 | ファイルからの読み込み時にエラーが発生しました。 |
QFileDevice::WriteError | 2 | ファイルへの書き込み時にエラーが発生した。 |
QFileDevice::FatalError | 3 | 致命的なエラーが発生した。 |
QFileDevice::ResourceError | 4 | リソース不足(開いているファイルが多すぎる、メモリ不足など)。 |
QFileDevice::OpenError | 5 | ファイルをオープンできませんでした。 |
QFileDevice::AbortError | 6 | 操作が中止された。 |
QFileDevice::TimeOutError | 7 | タイムアウトが発生した。 |
QFileDevice::UnspecifiedError | 8 | 特定できないエラーが発生した。 |
QFileDevice::RemoveError | 9 | ファイルを削除できなかった。 |
QFileDevice::RenameError | 10 | ファイル名を変更できませんでした。 |
QFileDevice::PositionError | 11 | ファイル内の位置を変更できませんでした。 |
QFileDevice::ResizeError | 12 | ファイルのサイズを変更できなかった。 |
QFileDevice::PermissionsError | 13 | ファイルにアクセスできませんでした。 |
QFileDevice::CopyError | 14 | ファイルをコピーできませんでした。 |
enum QFileDevice::FileHandleFlag
flags QFileDevice::FileHandleFlags
この列挙型は、ファイルをオープンするときに、一般的なQIODevice ではなく、ファイルにのみ適用される追加オプションを指定するために使用されます。
定数 | 値 | 説明 |
---|---|---|
QFileDevice::AutoCloseHandle | 0x0001 | open() に渡されたファイルハンドルは、close() によってクローズされるべきです。デフォルトの動作は、close は単にファイルをフラッシュし、アプリケーションはファイルハンドルをクローズする責任があります。ファイル名でファイルを開く場合、Qt は常にファイルハンドルを所有し、それを閉じなければならないため、このフラグは無視されます。 |
QFileDevice::DontCloseHandle | 0 | 明示的にクローズされない場合、QFile オブジェクトが破棄されても、ファイルハンドルはオープンされたままになります。 |
FileHandleFlags 型はQFlags<FileHandleFlag> の typedef です。これは、FileHandleFlag 値の OR の組み合わせを格納します。
enum QFileDevice::FileTime
この列挙型は、fileTime ()とsetFileTime ()関数で使用される。
定数 | 値 | 説明 |
---|---|---|
QFileDevice::FileAccessTime | 0 | ファイルが最近アクセスされた (例えば、読み取りや書き込みが行われた) 時。 |
QFileDevice::FileBirthTime | 1 | ファイルが作成された日時(UNIXではサポートされない場合がある)。 |
QFileDevice::FileMetadataChangeTime | 2 | ファイルのメタデータが最後に変更された時。 |
QFileDevice::FileModificationTime | 3 | ファイルのメタデータが最後に変更された日時。 |
setFileTime()、fileTime()、QFileInfo::fileTime()も参照の こと。
enum QFileDevice::MemoryMapFlag
flags QFileDevice::MemoryMapFlags
この enum は、map() 関数で使用できる特別なオプションを記述します。
定数 | 値 | 説明 |
---|---|---|
QFileDevice::NoOptions | 0 | オプションなし。 |
QFileDevice::MapPrivateOption | 0x0001 | マップされたメモリはプライベートになり、他のプロセスからは見えず、ディスクにも書き込まれません。そのような変更は、メモリのマッピングが解除されると失われます。マッピングが作成された後に行われたファイルの変更が、マッピングされたメモリを通して見えるかどうかは未定義である。この enum 値は Qt 5.4 で導入されました。 |
MemoryMapFlags 型はQFlags<MemoryMapFlag> の typedef です。これは MemoryMapFlag 値の OR の組み合わせを格納します。
enum QFileDevice::Permission
flags QFileDevice::Permissions
この enum は、permission() 関数がファイルのパーミッションと所有者を報告するために使用します。複数のパーミッションと所有権の値をテストするために、値を OR することができます。
定数 | 値 | 説明 |
---|---|---|
QFileDevice::ReadOwner | 0x4000 | ファイルはファイルの所有者によって読み取り可能です。 |
QFileDevice::WriteOwner | 0x2000 | ファイルの所有者が書き込み可能である。 |
QFileDevice::ExeOwner | 0x1000 | ファイルの所有者が実行可能である。 |
QFileDevice::ReadUser | 0x0400 | ファイルはユーザーによって読み取り可能である。 |
QFileDevice::WriteUser | 0x0200 | このファイルは、ユーザーが書き込み可能である。 |
QFileDevice::ExeUser | 0x0100 | ファイルがユーザーによって実行可能である。 |
QFileDevice::ReadGroup | 0x0040 | ファイルがグループによって読み取り可能である。 |
QFileDevice::WriteGroup | 0x0020 | ファイルがグループによって書き込み可能である。 |
QFileDevice::ExeGroup | 0x0010 | グループ内で実行可能 |
QFileDevice::ReadOther | 0x0004 | ファイルが他のユーザーによって読み取り可能である。 |
QFileDevice::WriteOther | 0x0002 | このファイルは他のユーザーが書き込み可能である。 |
QFileDevice::ExeOther | 0x0001 | このファイルは他人が実行可能である。 |
警告 Qtがサポートするプラットフォームの違いにより、ReadUser、WriteUser、ExeUserのセマンティクスはプラットフォームに依存します:Unixではファイルの所有者の権利が返され、Windowsでは現在のユーザーの権利が返されます。この動作は、将来の Qt バージョンで変更される可能性があります。
注意: NTFS ファイルシステムでは、所有権とパーミッションのチェックはパフォーマンス上の理由からデフォルトでは無効になっています。これを有効にするには、次の行を含めます:
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
その後、qt_ntfs_permission_lookup
を 1 ずつインクリメント/デクリメントすることで、パーミッション・チェックのオン/オフを切り替える。
qt_ntfs_permission_lookup++; // turn checking on qt_ntfs_permission_lookup--; // turn it off again
注意: これは非原子のグローバル変数なので、qt_ntfs_permission_lookup
をインクリメントまたはデクリメントするのは、メインスレッド以外のスレッドが開始する前か、メインスレッド以外のすべてのスレッドが終了した後にするのが安全である。
注意: Qt 6.6以降、変数qt_ntfs_permission_lookup
は非推奨です。以下の代替を使用してください。
パーミッションチェックを安全かつ簡単に管理する方法は、RAII クラスQNtfsPermissionCheckGuard
を使用することです。
void complexFunction() { QNtfsPermissionCheckGuard permissionGuard; // check is enabled // do complex things here that need permission check enabled } // as the guard goes out of scope the check is disabled
よりきめ細かい制御が必要な場合は、代わりに以下の関数でパーミッションを管理することが可能です:
qAreNtfsPermissionChecksEnabled();// ステータスをチェックするqEnableNtfsPermissionChecks(); // turn checking on qDisableNtfsPermissionChecks(); // turn it off again
Permissions型はQFlags<Permission>のtypedefである。これはPermissionの値のORの組み合わせを格納する。
メンバ関数ドキュメント
[virtual noexcept]
QFileDevice::~QFileDevice()
ファイルデバイスを破棄し、必要であれば閉じる。
[override virtual]
bool QFileDevice::atEnd() const
再実装:QIODevice::atEnd() const.
ファイルの末尾に達した場合はtrue
を返し、そうでない場合は false を返す。
Unix上の通常の空ファイル(例えば、/proc
)の場合、この関数はtrue
を返します。 なぜなら、ファイル・システムはそのようなファイルのサイズが0であると報告するからです。 したがって、そのようなファイルからデータを読み込む際には、atEnd()に依存するのではなく、データが読み込めなくなるまでread()を呼び出す必要があります。
[override virtual]
void QFileDevice::close()
再インプリメント:QIODevice::close().
QFileDevice::flush() を呼び出し、ファイルを閉じる。flush によるエラーは無視される。
QIODevice::close()も参照 。
QFileDevice::FileError QFileDevice::error() const
ファイルのエラーステータスを返す。
I/Oデバイス・ステータスはエラー・コードを返す。たとえば、open() がfalse
を返した場合、または読み取り/書き込み操作が -1 を返した場合、この関数を呼び出して操作に失敗した原因を調べることができる。
unsetError()も参照のこと 。
[virtual]
QString QFileDevice::fileName() const
ファイル名を返す。QFileDevice のデフォルトの実装は null 文字列を返します。
QDateTime QFileDevice::fileTime(QFileDevice::FileTime time) const
time で指定されたファイル時刻を返す。時刻を決定できない場合は、QDateTime() (無効な日付時刻) を返します。
setFileTime()、FileTime 、およびQDateTime::isValid()も参照してください 。
bool QFileDevice::flush()
バッファリングされたデータをファイルにフラッシュする。成功すればtrue
を返し、そうでなければfalse
を返す。
int QFileDevice::handle() const
ファイルのファイルハンドルを返す。
これは小さな正の整数であり、fdopen()
やfcntl()
などの C ライブラリ関数で使用するのに適している。ソケットにファイル記述子を使用するシステム(つまりUnixシステムだがWindowsではない)では、ハンドルはQSocketNotifier でも使用できる。
ファイルがオープンされていないかエラーの場合、handle() は -1 を返す。
QSocketNotifierも参照のこと 。
[override virtual]
bool QFileDevice::isSequential() const
再実装:QIODevice::isSequential() const.
ファイルがシーケンシャルにしか操作できない場合はtrue
を返し、そうでない場合はfalse
を返す。
ほとんどのファイルはランダムアクセスに対応していますが、特殊なファイルでは対応していない場合もあります。
QIODevice::isSequential()も参照 。
uchar *QFileDevice::map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions)
ファイルのsize バイトをoffset から始まるメモリにマップする。マップを成功させるためにはファイルを開いておく必要があるが、メモリがマップされた後もファイルを開いておく必要はない。QFile が破棄されるか、このオブジェクトで新しいファイルが開かれると、マップが解除されていないマップは自動的にマップが解除される。
マッピングは、MapPrivateOption を使用する場合を除いて、ファイルと同じオープン・モード(読み取りまたは書き込み)を持つ。
マッピングのオプションはflags を通して渡すことができる。
メモリへのポインタを返すか、エラーがあればnullptr
を返す。
unmap()も参照のこと 。
[virtual]
QFileDevice::Permissions QFileDevice::permissions() const
ファイルに対する QFile::Permission の完全な OR 組合せを返します。
setPermissions()も参照してください 。
[override virtual]
qint64 QFileDevice::pos() const
再実装:QIODevice::pos() const.
[override virtual protected]
qint64 QFileDevice::readData(char *data, qint64 len)
再実装:QIODevice::readData(char *data, qint64 maxSize).
[override virtual protected]
qint64 QFileDevice::readLineData(char *data, qint64 maxlen)
再実装:QIODevice::readLineData(char *data, qint64 maxSize).
[virtual]
bool QFileDevice::resize(qint64 sz)
ファイル・サイズ(バイト)を設定するsz 。リサイズが成功した場合はtrue
を返し、失敗した場合は false を返す。sz が現在のファイルより大きい場合、新しいバイト数は 0 に設定される。sz が小さい場合、ファイルは単に切り捨てられる。
警告: ファイルが存在しない場合、この関数は失敗することがある。
size()も参照のこと 。
[override virtual]
bool QFileDevice::seek(qint64 pos)
再実装:QIODevice::seek(qint64 pos)を再実装する。
ランダム・アクセス・デバイスの場合、この関数は現在の位置をpos に設定し、成功すればtrueを返し、エラーが発生すればfalseを返します。シーケンシャル・デバイスの場合、デフォルトの動作は何もせずfalseを返す。
ファイルの終端を超える位置を求める:位置がファイルの終端を超えている場合、seek() は直ちにファイルを拡張しません。この位置で書き込みが行われると、ファイルは拡張されます。前のファイル終端と新しく書き込まれたデータの間のファイルの内容は UNDEFINED であり、プラットフォームやファイルシステムによって異なる。
bool QFileDevice::setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime)
fileTime で指定されたファイル時刻をnewDate に設定し、成功すれば true を返し、失敗すれば false を返す。
注意: この関数を使用するには、ファイルがオープンされていなければならない。
fileTime() およびFileTimeも参照のこと 。
[virtual]
bool QFileDevice::setPermissions(QFileDevice::Permissions permissions)
ファイルのパーミッションを指定されたpermissions に設定する。成功した場合はtrue
を返し、パーミッションを変更できない場合はfalse
を返す。
警告 この関数は ACL を操作しないため、その有効性が制限される可能性がある。
permissions()も参照のこと 。
[override virtual]
qint64 QFileDevice::size() const
再実装:QIODevice::size() const.
ファイルのサイズを返します。
Unix 上の通常の空のファイル (/proc
など) の場合、この関数は 0 を返します。 このようなファイルの内容は、read() を呼び出したときに応じて生成されます。
bool QFileDevice::unmap(uchar *address)
address メモリのマッピングを解除する。
アンマップに成功するとtrue
を返し、失敗すると false を返す。
map()も参照 。
void QFileDevice::unsetError()
ファイルのエラーをQFileDevice::NoError に設定する。
error()も参照のこと 。
[override virtual protected]
qint64 QFileDevice::writeData(const char *data, qint64 len)
再実装:QIODevice::writeData(const char *data, qint64 maxSize).
マクロ・ドキュメント
ファイル関連I/Oクラス(QFile 、QSaveFile 、QTemporaryFile など)は、open()
メソッドを持っており、そのメソッドが作用するファイルをオープンする。ファイルへのデータの読み書きを行う前に、open()
への呼び出しの返り値をチェックすることが重要です。
このため、Qt 6.8 からは、open()
のオーバーロードに[[nodiscard]]
属性が付けられました。この変更は既存のコードベースで警告を発生させる可能性があるため、ユーザーコードは特定のマクロを定義することで、この属性の適用をオプトインまたはオプトアウトすることができます:
QT_USE_NODISCARD_FILE_OPEN
マクロが定義されている場合、open()
のオーバーロードは[[nodiscard]]
としてマークされます。QT_NO_USE_NODISCARD_FILE_OPEN
マクロが定義されている場合、open()
のオーバーロードは[[nodiscard]]
としてマークされない。- どちらのマクロも定義されていない場合、Qt 6.9 までのデフォルトではこの属性はありません。Qt 6.10 以降では、属性は自動的に適用されます。
- 両方のマクロが定義されている場合、プログラムは不正な形式になります。
この関数は Qt 6.8 で導入されました。
© 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.