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                          在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n

QIODevice::Unbuffered        忽略缓存

注意:

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

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

   QTextStream::readLine() 读取一行

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

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

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

stream.setCodec("UTF-8");

这样的函数进行设置。

猜你喜欢

转载自www.cnblogs.com/gd-luojialin/p/9215771.html