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: |
- 継承されたメンバを含む、すべてのメンバの一覧
- QFileDeviceは入出力およびネットワークに属しています。
メモ:このクラスの関数はすべてリエントラントです。
パブリック型
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
この列挙型は、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(); // 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).
マクロ・ドキュメント
ファイル関連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 で導入されました。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。