码迷,mamicode.com
首页 > 其他好文 > 详细

21文本文件操作

时间:2018-06-22 23:56:14      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:red   buffere   的区别   打开   描述   情况   win   UNC   ring   

上一节介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用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");

这样的函数进行设置。

21文本文件操作

标签:red   buffere   的区别   打开   描述   情况   win   UNC   ring   

原文地址:https://www.cnblogs.com/gd-luojialin/p/9215771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!