头文件:#include <QFileDevice> QFileDevice派生自 QIODevice;
QFileDevice是I/O设备的基类,它可以读写文本、二进制文件和资源。QFile提供了主要的功能,QFileDevice作为一个基类,用于与其他文件设备共享功能,如QTemporaryFile,通过提供所有的操作,可以对已经被QFile或QTemporaryFile打开的文件进行操作。
1. 公共函数
返回文件名,QFileDevice默认实现是返回一个null串;
(1) virtual QString fileName() const;
返回time指定的文件时间;
(2) QDateTime fileTime(QFileDevice::FileTime time) const;
其中:
enum FileTime {
FileAccessTime, //文件最近一次被访问的时间
FileBirthTime, //在创建文件时(UNIX可能不支持)。
FileMetadataChangeTime, //文件元数据最后一次更改的时间。
FileModificationTime //文件最近被修改的时间。
};
示例:
设置fileTime指定的文件时间为newDate,如果成功返回true;否则返回false。
(3) bool setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime);
将任何缓冲数据刷新到文件。如果成功返回true;否则返回false。
(4) bool flush();
返回文件的文件描述符;适合于c库的fdopen() 和 fcntl()
(5) int handle() const;
从偏移量开始将文件大小字节映射到内存中。映射成功时,文件应该是打开的,但在内存被映射后,
文件不需要保持打开状态。当QFile被销毁或者用这个对象打开一个新文件时,
任何未被取消映射的映射都将被自动取消映射。映射将具有与文件相同的打开模式(读和/或写),
除非使用MapPrivateOption,在这种情况下,它总是可能写入映射的内存。
(6) uchar *map(qint64 offset, qint64 size, MemoryMapFlags flags = NoOptions);
其中:
enum MemoryMapFlags {
NoOptions = 0,
/*映射的内存将是私有的,因此任何修改对其他进程都不可见,也不会写入磁盘。
当内存被取消映射时,任何这样的修改都将丢失。在映射创建后,
对文件所做的修改是否可以通过映射的内存可见是未指定的。这个枚举值是在Qt 5.4中引入的。*/
MapPrivateOption = 0x0001
};
取消内存地址的映射。
(7) bool unmap(uchar *address);
获取文件的权限
(8) virtual Permissions permissions() const;
enum Permission {
ReadOwner = 0x4000, //文件的所有者可读该文件。
WriteOwner = 0x2000, //文件的所有者可写该文件。
ExeOwner = 0x1000, //文件的所有者可执行该文件。
ReadUser = 0x0400, //用户可读该文件。
WriteUser = 0x0200, //用户可读该文件。
ExeUser = 0x0100, //用户可读该文件。
ReadGroup = 0x0040, //组可读该文件。
WriteGroup = 0x0020, //组可写该文件。
ExeGroup = 0x0010, //组可执行该文件。
ReadOther = 0x0004, //任何人可读该文件。
WriteOther = 0x0002,//任何人可写该文件。
ExeOther = 0x0001 //任何人可执行该文件。
};
将文件的权限设置为指定的权限。
(9) virtual bool setPermissions(Permissions permissionSpec);
I/O设备状态返回错误码。例如,如果open()返回false,或者读/写操作返回-1,
则可以调用这个函数来找出操作失败的原因。
(10) FileError error() const;
enum FileError {
NoError = 0, //没有错误发生
ReadError = 1, //读文件时发生错误
WriteError = 2, //写文件时发生错误
FatalError = 3, //严重错误发生
ResourceError = 4,//资源不足(例如,打开的文件太多,内存不足,等等)
OpenError = 5, //文件不能被打开
AbortError = 6, //操作异常
TimeOutError = 7, //超时发生
UnspecifiedError = 8,//发生了一个未定义的错误。
RemoveError = 9, //该文件不能被移除
RenameError = 10, //该文件不能被重命名
PositionError = 11,//无法更改文件中的位置。
ResizeError = 12, //无法调整文件大小。
PermissionsError = 13, //该文件无法被访问。
CopyError = 14 //无法复制该文件。
};
设置文件的错误为QFileDevice::NoError。
(11) void unsetError();
派生公共函数
返回当前位置;
(12) qint64 pos() const override;
对于随机访问设备,此函数将当前位置设置为pos,成功时返回true,错误时返回false。
对于顺序设备,默认行为是什么都不做并返回false。
在文件的末尾以外进行查找:如果位置超出了文件的末尾,那么seek()将不会立即扩展文件。
如果在这个位置执行写操作,那么文件将被扩展。从文件的前一个末尾到新写入的数据之间的
文件内容为“未定义”,不同平台和文件系统的内容不同。
(13)bool seek(qint64 offset) override;
判断文件是否到达文件尾
(14) bool atEnd() const override;