QFileDevice Class

QFileDevice クラスは、オープン・ファイルからの読み込みと、オープン・ファイルへの書き込みのためのインターフェースを提供します。詳細...

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

QFile and 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 は、QFileQSaveFile によってオープンされたファイルに対して実行できるすべての操作を提供することで、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マップされたメモリはプライベートになり、他のプロセスからは見ることができず、ディスクにも書き込まれません。そのような変更は、メモリのマッピングが解除されると失われます。マッピングが作成された後に行われたファイルの変更が、マッピングされたメモリを通して見えるかどうかは未定義である。このenum値はQt 5.4で導入されました。

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

enum QFileDevice::Permission
flags QFileDevice::Permissions

この enum は、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();   // check status
qEnableNtfsPermissionChecks();       // turn checking on
qDisableNtfsPermissionChecks();      // turn it off again

Permissions型はQFlags<Permission>のtypedefである。Permissions型はQFlags<Permission>の型定義であり、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() を呼び出し、ファイルを閉じる。フラッシュによるエラーは無視される。

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)

再リプルメント: (char *data, qint64 maxSize) const: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).

マクロ・ドキュメント

[since 6.8] QT_NO_USE_NODISCARD_FILE_OPEN

[since 6.8] QT_USE_NODISCARD_FILE_OPEN

ファイル関連I/Oクラス(QFileQSaveFileQTemporaryFile など)は、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 で導入されました。

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