qt 多个字符串 序列化到文件注意事项。

当多个字符串 序列化到文件时,每个字符串尾要加endl来分隔.

否则输入时会区分不了各个字符串。 见下例:

#include <QtGui>

#define CLIPFILE "clip.txt"
QString commonStr[4];  //commonStr[0] 本测试程序未使用
QString str[4];            //str[0] 本测试程序未使用

int main()
{
     commonStr[1]="1";
    commonStr[2]="2";
    commonStr[3]="3";
    //持久化到flash, 实际上是文件操作
    QFile outFile(CLIPFILE);
    outFile.open(QIODevice::WriteOnly|QIODevice::Text);
    QTextStream ts(&outFile);
    for(int i=1;i<4;i++)
    {
        ts << commonStr[i]<<endl;
//        ts << commonStr[i];  //如果不加endl, 读入时会直接读到文件尾给第一个字符串
    }
    outFile.close();
    int r=system("sync");
    (void) r;


    QFile file(CLIPFILE);
    if(!file.exists()) return 0;
    file.open(QIODevice::ReadOnly | QIODevice::Text);
    QTextStream ts2(&file);
    for(int i=1;i<4;i++)
        ts2>>str[i];
    file.close();
    qDebug()<<str[1]<<endl;
    qDebug()<<str[2]<<endl;
    qDebug()<<str[3]<<endl;

    return 0;
}

加endl 后正确的打印输出

./qttest
"1"
"2"
"3"

//查看clip.txt 二进制文件,字符串之间已用0x0a隔开

$ xxd clip.txt
0000000: 310a 320a 330a                           1.2.3.

不加endl 错误的打印输出

./qttest
"123"
""
""

//查看clip.txt 二进制文件, 多个字符串被连接在了一起。不是我们所需要的。

 $> xxd clip.txt
 0000000: 3132 33                                  123

补充, 如果采用数据流QDataStream 来序列化,则不存在该问题. 因为数据流添加了字符串类的长度信息在文件中. 这也是QDataStream 与 QTextStream 的一个差别, 你可以在本程序上实验一下.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值