鱼C论坛

 找回密码
 立即注册
查看: 3250|回复: 0

[技术原创] 147-文件级操作-【扫盲】

[复制链接]
发表于 2016-11-3 10:39:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2016-11-4 10:31 编辑

0.gif


老规矩,先从视觉上感受下这个类的‘雄伟’,然后慢慢开始爬着玩儿~

应用程序中经常需要对设备或者文件进行读取或者写入

也会对本地文件或者目录进行添加删除遍历等操作。

从下面三个方面分开说吧~


  • 输入\输出设备


  • QIODevice类是Qt中所有I\O设备的基础接口类!

    为QFile、QBuffer、QTcpSocket等支持读\写数据块的设备提供了一个抽象接口。

    所以QIODevice类是抽象类,无法被实例化,只是提供I\O功能。

    访问一个设备要经历如下逻辑操作:

    使用open()函数打开设备->

    制定打开模式->

    打开后使用write()或者putChar()进行写入->

    使用read()、readLine()、readAll()进行读取->

    最后使用close()关闭设备


    常见的打开模式如下:

    1.png


    憋急给你翻译下:

    常量 描述
    QIODevice::NotOpen 设备没有打开
    QIODevice::ReadOnly 设备以只读方式打开,此时无法写入
    QIODevice::WriteOnly 设备以只写方式打开,此时无法读取
    QIODevice::ReadWrite 设备以读写方式打开
    QIODevice::Append 设备以附加模式打开,所有的数据都将写入到文件的末尾
    QIODevice::Truncate 如果可能,设备在打开前会被阻断,先前所有内容将丢失
    QIODevice::Text 读取时,行结尾终止符会被转换为'\n'
    写入时,行结尾终止符会被转换为本地编码,类win‘\r\n’
    QIODevice::Unbuffered 绕过设备所有的缓冲区


    QIODevice会区别两种类型的设备:随机存设备顺序存设备

    随机存取设备 支持使用seek()函数来定位到任意的位置。
    文件中的当前位置可以使用pos()函数来获取。
    常见类有QFile、QBuffer、QTemporaryFile等
    顺序存储设备 不支持定位到任意的位置,数据必须一次性读取。
    pos()和size()函数无法使用
    常见类有QTcpSocket、QUpdSocket、QProcess等


    可以通过isSequential()函数进行判断哈~

    通过子类化QIODevice可以为自己的I/O设备提供相同的接口。

    只需要重新实现readData()、writeData()两个函数即可~


  • 文件级操作



    • 文件QFile

      QFile类提供了一个用于读/写文件的接口!可用于读/写:

      文本文件、二进制文件、Qt资源的I/O设备


      一般在构建QFile对象时指定文件名,当然也可以使用setFileName()在其他任何时间进行设置。

      无论哪种操作系统,文件名路径中的文件分隔符都需要使用‘/’

      常见的一些应用在文件的函数

      open() 打开
      close() 关闭
      flush() 刷新
      exists() 检查文件是否存在
      remove() 删除一个文件
      size()获取文件的大小
      seek() 定位到文件的任意位置
      pos() 获取当前的位置
      atEnd() 判断是否达到了文件的末尾



      文件的数据读/写一般使用QDataStream、QTextStream来完成。


    • 文件信息QFileInfo

      QFileInfo类提供了与系统无关的文件信息,包括:

      文件名称、文件系统所在路径、文件访问权限、最近一次修改/读取时间、Qt资源等。

      QFileInfo可以使用相对(relative)路径或者绝对路径(absolute)来指向一个文件
      (Ps:你若分不清,对应点击去重温哈~)

      常用函数给你总结下:

      isRelative() 判断一个QFileInfo对象使用的是相对路径还是绝对路径 setFile() 设置QFileInfo指向文件
      makeAbsolute() 将一个相对路径转换为绝对路径 exists() 查看文件是否存在
      size() 获取文件大小 isFile() 判断文件类型
      isDir() 判断是否为有效路径 isSymLink() 判断是否是符号链接连接
      symLinkTarget() 函数返回符号链接指向的文件名称 path() 获取文件路径
      fileName() 获取文件名 baseName() 获取文件名基本名称
      suffix() 获取文件名的后缀。 completeSuffix() 获取文件名中的基本名称。
      created() 获取文件的日期 isReadable()
      isWritable()
      isExecutable()
      获取访问权限
      owner()
      ownerId()
      group()
      groupId()
      获取文件所有权 permission() 将文件的访问权限或所有权一次性读取出来。





    • 临时文件QTemporaryFile

      QTemporaryFile类是一个用来操作临时文件的I/O设备。

      可以安全的创建一个唯一的临时文件!

      调用open()函数便会创建一个唯一的临时文件。

      当销毁QTemporaryFile对象时,该文件会被自动删除掉。

      通过QDir::temPath()获取临时文件生成的临时目录路径。(有点绕,多读两遍就好了)

      格式唯一,如下所示:
      QTemporaryFile file;
      if(file.open())
      {
              //进行对临文件的相关操作
      }






评分

参与人数 1荣誉 +5 收起 理由
alanbruk + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 21:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表