QFileDevice 类

The QFileDevice class provides an interface for reading from and writing to open files. 更多...

头: #include <QFileDevice>
qmake: QT += core
Since: Qt 5.0
继承: QIODevice
继承者: QFile and QSaveFile

注意: 此类的所有函数 可重入 .

公共类型

enum FileError { NoError, ReadError, WriteError, FatalError, ..., CopyError }
enum FileHandleFlag { AutoCloseHandle, DontCloseHandle }
flags FileHandleFlags
enum MemoryMapFlags { NoOptions, MapPrivateOption }
enum Permission { ReadOwner, WriteOwner, ExeOwner, ReadUser, ..., ExeOther }
flags Permissions

公共函数

~QFileDevice ()
FileError error () const
virtual QString fileName () const
bool flush ()
int handle () const
uchar * map (qint64 offset , qint64 size , MemoryMapFlags flags = NoOptions)
virtual Permissions permissions () const
virtual bool resize (qint64 sz )
virtual bool setPermissions (Permissions permissions )
bool unmap (uchar * address )
void unsetError ()

重实现公共函数

virtual bool atEnd () const
virtual void close ()
virtual bool isSequential () const
virtual qint64 pos () const
virtual bool seek (qint64 pos )
virtual qint64 size () const

重实现保护函数

virtual qint64 readData (char * data , qint64 len )
virtual qint64 readLineData (char * data , qint64 maxlen )
virtual qint64 writeData (const char * data , qint64 len )

额外继承成员

详细描述

The QFileDevice class provides an interface for reading from and writing to open files.

QFileDevice is the base class for I/O devices that can read and write text and binary files and resources . QFile offers the main functionality, QFileDevice serves as a base class for sharing functionality with other file devices such as QTemporaryFile ,通过提供所有文件操作,打开通过 QFile or QTemporaryFile .

另请参阅 QFile and QTemporaryFile .

成员类型文档编制

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 类型是 typedef 对于 QFlags <FileHandleFlag>。它存储 FileHandleFlag 值的 OR 组合。

enum QFileDevice:: MemoryMapFlags

此枚举描述的特殊选项可以用于 map () 函数。

常量 描述
QFileDevice::NoOptions 0 没有选项。
QFileDevice::MapPrivateOption 0x0001 映射内存将是私有的,所以,任何修改对其它进程是不可见的,且不会写入磁盘。任何这种修改都会丢失,当取消内存映射时。未指定是否对文件做出修改,在映射创建后,将透过映射内存可见。该枚举值在 Qt 5.4 引入。

该枚举在 Qt 4.4 引入或被修改。

enum QFileDevice:: Permission
flags QFileDevice:: Permissions

此枚举用于 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 The file is readable by anyone.
QFileDevice::WriteOther 0x0002 The file is writable by anyone.
QFileDevice::ExeOther 0x0001 The file is executable by anyone.

警告: 由于 Qt 支持的平台差异,ReadUser、WriteUser 及 ExeUser 的语义从属平台:Unix 返回文件所有者的权限,而 Windows 返回当前用户的权限。此行为在未来 Qt 版本中可能改变。

注意: 在 NTFS 文件系统,默认情况下,出于性能原因禁用所有权和权限校验。要启用它,包括以下行:

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
					

然后打开和关闭权限校验,通过递增和递减 qt_ntfs_permission_lookup by 1.

qt_ntfs_permission_lookup++; // turn checking on
qt_ntfs_permission_lookup--; // turn it off again
					

Permissions 类型是 typedef 对于 QFlags <Permission>。它存储 Permission 值的 OR 组合。

成员函数文档编制

QFileDevice:: ~QFileDevice ()

销毁文件设备,关闭它若有必要。

[虚拟] bool QFileDevice:: atEnd () const

重实现自 QIODevice::atEnd ().

返回 true 若到达 EOF (文件末尾);否则返回 false。

Unix 常规空文件 (如,那些在 /proc ),此函数返回 true ,由于文件系统把这种文件的大小报告为 0。因此,不应依赖 atEnd() 当读取这种文件数据时,而是调用 read () 直到无法读取更多数据。

[虚拟] void QFileDevice:: close ()

重实现自 QIODevice::close ().

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

另请参阅 QIODevice::close ().

FileError QFileDevice:: error () const

返回文件错误状态。

I/O 设备状态返回错误代码。例如,若 open () 返回 false ,或读/写操作返回 -1,可以调用此函数以找出操作为什么失败的原因。

另请参阅 unsetError ().

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

返回文件名。默认实现在 QFileDevice 返回 null 字符串。

bool QFileDevice:: flush ()

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

int QFileDevice:: handle () const

返回文件的文件句柄。

这是小正整数,适合用于 C 库函数,譬如 fdopen() and fcntl() 。在套接字使用文件描述符的系统 (即 Unix 系统,而非 Windows) 中,句柄可以用于 QSocketNotifier 还。

若文件未被打开,或存在错误,handle() 返回 -1。

另请参阅 QSocketNotifier .

[虚拟] bool QFileDevice:: isSequential () const

重实现自 QIODevice::isSequential ().

返回 true 若只能按顺序操纵文件;否则返回 false .

大多数文件支持随机访问,但某些特殊文件不可以。

另请参阅 QIODevice::isSequential ().

uchar *QFileDevice:: map ( qint64 offset , qint64 size , MemoryMapFlags flags = NoOptions)

映射 size 字节的文件到内存起始于 offset 。要成功映射,应打开文件。但文件不需要保持打开,在映射内存后。当 QFile 被销毁 (或采用此对象打开新文件),任何尚未取消映射的映射都将自动取消映射。

映射将拥有如文件的相同打开方式 (读和/或写),除非使用 MapPrivateOption ,在这种情况下,写入到映射内存始终是可能的。

可以传递任何映射选项透过 flags .

Returns a pointer to the memory or 0 if there is an error.

另请参阅 unmap ().

[虚拟] Permissions QFileDevice:: permissions () const

Returns the complete OR-ed together combination of QFile::Permission for the file.

另请参阅 setPermissions ().

[虚拟] qint64 QFileDevice:: pos () const

重实现自 QIODevice::pos ().

[virtual protected] qint64 QFileDevice:: readData ( char * data , qint64 len )

重实现自 QIODevice::readData ().

[virtual protected] qint64 QFileDevice:: readLineData ( char * data , qint64 maxlen )

重实现自 QIODevice::readLineData ().

[虚拟] bool QFileDevice:: resize ( qint64 sz )

设置文件大小 (以字节为单位) sz 。返回 true 若重置大小成功;否则 false。若 sz > 文件目前大小,将新字节数设为 0;若 sz 更小,只需截取文件。

警告: 此函数可能失败,若文件不存在。

另请参阅 size ().

[虚拟] bool QFileDevice:: seek ( qint64 pos )

重实现自 QIODevice::seek ().

对于随机访问设备,此函数将当前位置设为 pos ,返回 true 当成功时,或 false 若出现错误。对于顺序设备,默认行为是什么都不做并返回 false。

寻址超出 EOF (文件末尾):若位置超出文件末尾,seek() 不会立即延伸文件。若在此位置履行写入,那么文件将延伸。在文件上一结尾和新近写入数据之间的文件内容 UNDEFINED (未定义),且因平台和文件系统不同而异。

[虚拟] bool QFileDevice:: setPermissions ( Permissions permissions )

将文件权限设为 permissions 指定。返回 true 若成功,或 false 若权限不能被修改。

警告: 此函数不操纵 ACL (访问控制列表),这可能限制其有效性。

另请参阅 permissions ().

[虚拟] qint64 QFileDevice:: size () const

重实现自 QIODevice::size ().

返回文件大小。

Unix 常规空文件 (如,那些在 /proc ),此函数返回 0;这种文件的内容是按需生成的,为响应调用 read ().

bool QFileDevice:: unmap ( uchar * address )

取消映射内存 address .

返回 true 若取消映射成功;否则 false。

另请参阅 map ().

void QFileDevice:: unsetError ()

把文件的错误设为 QFileDevice::NoError .

另请参阅 error ().

[virtual protected] qint64 QFileDevice:: writeData (const char * data , qint64 len )

重实现自 QIODevice::writeData ().