• 21文本文件操作


    上一节介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。

    QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream使用 16 位的QChar作为基础的数据存储单位,同样,它也支持 C++ 标准类型,如 int 等。实际上,这是将这种标准类型与字符串进行了相互转换。

    QTextStream同QDataStream的使用基本一致

    写文件操作

    void Widget::ReadFile()

    {

          //新建本级目录下../test.txt的文件

             QFile writeFile(QString("../test.txt"));

             //创建数据流,与file文件相关联

             QTextStream in(&writeFile);

          //打开文件,只写方式

             bool bIsOK=writeFile.open(QIODevice::WriteOnly);

             if(bIsOK==true)

             {

            //往数据流中写数据,相当于往文件里写数据

                 QString strBuf="初学Qt";

                 in<<strBuf<<250;

             }

            writeFile.close();

    }

    读文件操作

    void Widget::WriteFile()

    {

            QFile readFile("../test.txt");

            QTextStream out(&readFile);

            //打开文件,只读方式

            bool bIsOk=readFile.open(QIODevice::ReadOnly);

            if(bIsOk==true)

            {

                QString str;

                int a;

                out>>str>>a;

                qDebug()<<str<<a;

            }

            readFile.close();

    }

    从下表中看到这些打开方式的区别:

    枚举值                 描述

    QIODevice::NotOpen                 未打开

    QIODevice::ReadOnly                以只读方式打开

    QIODevice::WriteOnly                以只写方式打开

    QIODevice::ReadWrite         以读写方式打开

    QIODevice::Append                        以追加的方式打开,新增加的内容将被追加到文件末尾

    QIODevice::Truncate                 以重写的方式打开,在写入新的数据时会将原有

    数据全部清除,游标设置在文件开头。

    QIODevice::Text                          在读取时,将行结束符转换成 ;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是

    QIODevice::Unbuffered        忽略缓存

    注意:

    在使用QDataStream的时候,这样的代码很方便,但是使用了QTextStream时却有所不同:读出的时候,str 里面将是”初学Qt”,ans 是 250。这是因为当使用QDataStream写入的时候,实际上会在要写入的内容前面,额外添加一个这段内容的长度值。而以文本形式写入数据,是没有数据之间的分隔的。即输出时。“初学Qt250”

    因此,使用文本文件时,很少会将其分割开来读取,而是使用诸如使用:

       QTextStream::readLine() 读取一行

       QTextStream::readAll()读取所有文本

    这种函数之后再对获得的QString对象进行处理。

    默认情况下,QTextStream的编码格式是 Unicode,如果我们需要使用另外的编码,可以使用:

    stream.setCodec("UTF-8");

    这样的函数进行设置。

  • 相关阅读:
    XMPP即时通讯资料记录
    iOS 图片裁剪与修改
    iOS开发xcode报错:"xxxxxx"has been modified since the precompiled header was built
    模糊数学课件(清晰易懂)
    几个可用于数据挖掘和统计分析的java库
    java中list集合的内容,如何使用像数据库中group by形式那样排序
    spark java 代码example
    spark 编程向导
    一个深度学习博客
    Selenium2(WebDriver)_如何判断WebElement元素对象是否存在
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9215771.html
Copyright © 2020-2023  润新知