QFileDevice 类

QFileDevice 类提供对打开文件进行读写操作的接口。 更多信息...

头文件 #include <QFileDevice>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承自 QIODevice
子类

QFileQSaveFile

注意: 本类中所有函数都是可重入的。 reentrant

公共类型

枚举FileError { NoError, ReadError, WriteError, FatalError, ResourceError, …, CopyError }
枚举FileHandleFlag { AutoCloseHandle, DontCloseHandle }
标志FileHandleFlags
枚举FileTime { FileAccessTime, FileBirthTime, FileMetadataChangeTime, FileModificationTime }
枚举MemoryMapFlag { NoOptions, MapPrivateOption }
标志MemoryMapFlags
枚举Permission { ReadOwner, WriteOwner, ExeOwner, ReadUser, WriteUser, …, ExeOther }
标志权限

公共函数

virtual~QFileDevice()
QFileDevice::FileErrorerror() const
virtual QStringfileName() const
QDateTimefileTime(QFileDevice::FileTime time) const
boolflush()
inthandle() const
uchar *map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions)
virtual QFileDevice::Permissionspermissions() const
virtual boolresize(qint64 sz)
boolsetFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime)
virtual boolsetPermissions(QFileDevice::Permissions permissions)
boolunmap(uchar *address)
voidunsetError()

重新实现公共函数

virtual boolatEnd() const override
virtual voidclose() override
virtual boolisSequential() const override
virtual qint64pos() const override
virtual boolseek(qint64 pos) override
virtual qint64size() const override

重新实现保护函数

virtual qint64readData(char *data, qint64 len) override
virtual qint64readLineData(char *data, qint64 maxlen) override
virtual qint64writeData(const char *data, qint64 len) override

详细描述

QFileDevice是可用于读取和写入文本和二进制文件及其资源的I/O设备的基本类。QFile提供主要功能,QFileDevice作为其他文件设备(如QSaveFile),的功能类提供所有可以在通过QFileQSaveFile打开的文件上进行的操作。

另请参阅QFileQSaveFile

成员类型文档

枚举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无法复制文件。

枚举QFileDevice::FileHandleFlag
标志QFileDevice::FileHandleFlags

当打开文件时,使用此枚举指定仅适用于文件且不适用于通用QIODevice的附加选项。

常量描述
QFileDevice::AutoCloseHandle0x0001传递给open()的文件句柄应由close()关闭,默认行为是仅刷新文件,应用程序负责关闭文件句柄。当通过名称打开文件时,此标志被忽略,因为Qt始终拥有文件句柄并必须关闭它。
QFileDevice::DontCloseHandle0如果未显式关闭,则在QFile对象被销毁时,将留下底层的文件句柄打开。

FileHandleFlags类型是QFlags<FileHandleFlag>的typedef。它存储FileHandleFlag值的OR组合。

枚举QFileDevice::FileTime

此枚举用于fileTime()和setFileTime()函数。

常量描述
QFileDevice::FileAccessTime0文件最近被访问的时间(例如,读取或写入)。
QFileDevice::FileBirthTime1文件创建的时间(可能在UNIX上不受支持)。
QFileDevice::FileMetadataChangeTime2最后更改文件元数据的时间。
QFileDevice::FileModificationTime3文件最近被修改的时间。

另请参阅setFileTimefileTimeQFileInfo::fileTime

枚举 QFileDevice::MemoryMapFlag
标志 QFileDevice::MemoryMapFlags

此枚举描述了可能由 map() 函数使用的特殊选项。

常量描述
QFileDevice::NoOptions0没有选项。
QFileDevice::MapPrivateOption0x0001映射的内存将是私有的,因此任何更改对其他进程不可见,并且不会写入磁盘。当内存取消映射时,此类更改将丢失。在映射创建之后对文件所做的更改是否可以通过映射的内存可见是不确定的。此枚举值在 Qt 5.4 中引入。

MemoryMapFlags 类型是 QFlags<MemoryMapFlag> 的别称。它存储了 MemoryMapFlag 值的 OR 组合。

枚举 QFileDevice::权限
标志 QFileDevice::Permissions

此枚举用于 permission() 函数报告文件的权限和所有权。这些值可以组合使用以测试多个权限和所有权值。

常量描述
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 上返回当前用户的权限。在未来版本中,此行为可能会更改。

注意:出于性能原因,默认情况下在 NTFS 文件系统上禁用了所有权和权限检查。要启用它,请包含以下行

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;

然后通过递增和递减 qt_ntfs_permission_lookup 来启用和关闭权限检查。

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> 的别称。它存储了 Permission 值的 OR 组合。

成员函数文档

[虚函数 noexcept] QFileDevice::~QFileDevice()

销毁文件设备,如果需要则关闭它。

[重写虚函数] bool QFileDevice::atEnd() const

重写了: QIODevice::atEnd() const.

如果已到达文件末尾返回 true;否则返回 false。

对于Unix系统中的常规空文件(例如 /proc 中的文件),此函数返回 true,因为文件系统报告这类文件的大小为0。因此,您在从这类文件读取数据时不应依赖 atEnd(),而应调用 read() 直到最后不能读取更多数据。

[重写虚拟] void QFileDevice::close()

实现: QIODevice::close().

调用 QFileDevice::flush() 并关闭文件。忽略 flush 的错误。

另请参阅QIODevice::close

QFileDevice::FileError QFileDevice::error() const

返回文件错误状态。

I/O设备状态返回一个错误代码。例如,如果 open() 返回 false,或读写操作返回 -1,则可以通过调用此函数来确定操作失败的原因。

另请参阅unsetError

[虚拟] QString QFileDevice::fileName() const

返回文件名。在 QFileDevice 中的默认实现返回一个空字符串。

QDateTime QFileDevice::fileTime(QFileDevice::FileTime time) const

返回由 time 指定的文件时间。如果无法确定时间返回 QDateTime()(一个无效的日期时间)。

另请参阅setFileTimeFileTimeQDateTime::isValid

bool QFileDevice::flush()

将任何缓冲数据刷新到文件。如果成功返回 true;否则返回 false

int QFileDevice::handle() const

返回文件的文件句柄。

这是一个小的正整数,适合与 C 库函数(如 fdopen()fcntl())一起使用。在系统使用文件描述符用于套接字(即 Unix 系统,但不是 Windows)时,句柄可以与 QSocketNotifier 一起使用。

如果文件未打开或有错误,handle() 返回 -1。

另请参阅QSocketNotifier

[重写虚拟] 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 的完整位或组合。

另请参阅 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() 不会立即扩展文件。如果在此位置执行写操作,则文件将扩展。文件之间以前文件末尾和新写入数据的内容是不确定的,并且在不同平台和文件系统中会有所不同。

bool QFileDevice::setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime)

将文件时间设置为指定的 fileTimenewDate,如果成功则返回 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).

© 2024 The Qt Company Ltd. 本文件中包含的文档贡献者保留其各自的版权。本文件中提供的内容根据自由软件基金会发布的 GNU 自由文档许可协议 version 1.3 的条款进行许可。Qt 和相应的商标是芬兰的 The Qt Company Ltd. 和/或在其他国家的商标。所有其他商标是其各自所有者的财产。