このページでは

QFileDevice Class

QFileDevice クラスは、開いているファイルからの読み取りおよび書き込みを行うためのインターフェースを提供します。詳細...

ヘッダー: #include <QFileDevice>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承元: QIODevice
継承元:

QFile およびQSaveFile

注:このクラスのすべての関数は再入可能です。

パブリック型

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

マクロ

詳細な説明

QFileDevice は、テキストファイル、バイナリファイル、およびリソースの読み書きが可能な I/O デバイスの基底クラスです。QFile が主要な機能を提供する一方、QFileDevice は、QFile またはQSaveFile によって開かれたファイルに対して実行可能なすべての操作を提供することで、QSaveFile などの他のファイルデバイスと機能を共有するための基底クラスとして機能します。

QFile およびQSaveFileも参照してください 。

メンバ型のドキュメント

enum QFileDevice::FileError

この列挙型は、error() 関数によって返される可能性のあるエラーを表します。

定数定数名説明
QFileDevice::NoError0エラーは発生しませんでした。
QFileDevice::ReadError1ファイルからの読み取り中にエラーが発生しました。
QFileDevice::WriteError2ファイルへの書き込み中にエラーが発生しました。
QFileDevice::FatalError3致命的なエラーが発生しました。
QFileDevice::ResourceError4リソースが不足しています(例:開いているファイルが多すぎる、メモリ不足など)。
QFileDevice::OpenError5ファイルを開くことができませんでした。
QFileDevice::AbortError6操作が中止されました。
QFileDevice::TimeOutError7タイムアウトが発生しました。
QFileDevice::UnspecifiedError8不特定のエラーが発生しました。
QFileDevice::RemoveError9ファイルを削除できませんでした。
QFileDevice::RenameError10ファイルの名前を変更できませんでした。
QFileDevice::PositionError11ファイル内の位置を変更できませんでした。
QFileDevice::ResizeError12ファイルのサイズを変更できませんでした。
QFileDevice::PermissionsError13ファイルにアクセスできませんでした。
QFileDevice::CopyError14ファイルをコピーできませんでした。

enum QFileDevice::FileHandleFlag
flags QFileDevice::FileHandleFlags

この列挙型は、ファイルを開く際に、一般的なQIODevice には適用されず、ファイルにのみ適用される追加のオプションを指定するために使用されます。

定数値説明
QFileDevice::AutoCloseHandle0x0001open() に渡されたファイルハンドルは、close() によって閉じられる必要があります。デフォルトの挙動では、close はファイルをフラッシュするだけであり、ファイルハンドルの閉じる処理はアプリケーションの責任となります。名前でファイルを開く場合、Qt が常にファイルハンドルを所有し、それを閉じる必要があるため、このフラグは無視されます。
QFileDevice::DontCloseHandle0明示的に閉じられない場合、QFile オブジェクトが破棄されても、基になるファイルハンドルは開いたままになります。

FileHandleFlags 型は、QFlags<FileHandleFlag> の typedef です。これは、FileHandleFlag 値の論理和(OR)を格納します。

enum QFileDevice::FileTime

この列挙型は、fileTime() およびsetFileTime() 関数で使用されます。

定数定数名 値説明
QFileDevice::FileAccessTime0ファイルに最後にアクセスされた(読み取りまたは書き込みが行われた)日時。
QFileDevice::FileBirthTime1ファイルが作成された日時(UNIX ではサポートされていない場合があります)。
QFileDevice::FileMetadataChangeTime2ファイルのメタデータが最後に変更された日時。
QFileDevice::FileModificationTime3ファイルが最後に変更された日時。

関連項目: setFileTime()、fileTime()、およびQFileInfo::fileTime()。

enum QFileDevice::MemoryMapFlag
flags QFileDevice::MemoryMapFlags

この列挙型は、map() 関数で使用可能な特別なオプションを表します。

定数定数名説明
QFileDevice::NoOptions0オプションなし。
QFileDevice::MapPrivateOption0x0001マップされたメモリはプライベートとなるため、変更内容は他のプロセスからは認識されず、ディスクにも書き込まれません。 メモリのマッピングが解除されると、そのような変更はすべて失われます。マッピングの作成後にファイルに加えられた変更が、マップされたメモリを通じて見えるかどうかは未定義です。この列挙型値は Qt 5.4 で導入されました。

MemoryMapFlags 型は、QFlags<MemoryMapFlag> の typedef です。これは、MemoryMapFlag 値の論理和 (OR) 組み合わせを格納します。

enum QFileDevice::Permission
flags QFileDevice::Permissions

この列挙型は、permission() 関数がファイルの権限や所有者を報告するために使用されます。これらの値を論理和(OR)で組み合わせることで、複数の権限や所有者の値を検証することができます。

定数値説明
QFileDevice::ReadOwner0x4000ファイルの所有者は、そのファイルを読み取ることができます。
QFileDevice::WriteOwner0x2000ファイルの所有者は、そのファイルに書き込み権限を持っています。
QFileDevice::ExeOwner0x1000ファイルの所有者は、そのファイルを実行できます。
QFileDevice::ReadUser0x0400ユーザーはファイルを読み取ることができます。
QFileDevice::WriteUser0x0200ユーザーはファイルに書き込み権限を持っています。
QFileDevice::ExeUser0x0100ユーザーはファイルを実行できます。グループはファイルを読み取ることができます。
QFileDevice::ReadGroup0x0040ファイルはグループによって読み取り可能です。
QFileDevice::WriteGroup0x0020そのファイルは、グループによって書き込み可能です。
QFileDevice::ExeGroup0x0010そのファイルは、グループによって実行可能です。そのファイルは、他のユーザーによって読み取り可能です。
QFileDevice::ReadOther0x0004そのファイルは他者によって読み取り可能です。
QFileDevice::WriteOther0x0002そのファイルは、他者によって書き込み可能です。
QFileDevice::ExeOther0x0001ファイルは他者によって実行可能です。

警告: 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` 内のファイル)の場合、ファイルシステムはこのようなファイルのサイズを 0 と報告するため、この関数は `true` を返します。したがって、このようなファイルからデータを読み込む際には `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 におけるデフォルトの実装では、空文字列が返されます。

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 が現在のファイルサイズより大きい場合、`new bytes` は 0 に設定されます。sz が小さい場合は、ファイルは単に切り捨てられます。

警告: ファイルが存在しない場合、この関数は 失敗する可能性があります。

size()も参照してください 。

[override virtual] bool QFileDevice::seek(qint64 pos)

QIODevice::seek (qint64 pos)を再実装します。

ランダムアクセスデバイスに対して、この関数は現在の位置をpos に設定し、成功した場合は true を、エラーが発生した場合は false を返します。シーケンシャルデバイスに対して、デフォルトの動作は何も行わず、false を返すことです。

ファイルの末尾を超えるシーク:位置がファイルの末尾を超えている場合、seek() は直ちにファイルを拡張しません。この位置で書き込みが行われた場合、ファイルは拡張されます。以前のファイル末尾と新しく書き込まれたデータとの間のファイルの内容は未定義であり、プラットフォームやファイルシステムによって異なります。

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)を再実装します。

マクロのドキュメント

[since 6.8] QT_NO_USE_NODISCARD_FILE_OPEN

[since 6.8] QT_USE_NODISCARD_FILE_OPEN

ファイル関連の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 で導入されました。

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