Qt之QFileDevice

头文件:#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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值