• 4998阅读
  • 4回复

[提问]QFile和QDataStream无法对文本读取 [复制链接]

上一主题 下一主题
离线彩阳
 

只看楼主 倒序阅读 楼主  发表于: 2012-10-22
关键词: QT4求助QFile
我建立了一个小实验,测试是否能够通过QFile和QDataStream来tokenize文本的内容。但是测试失败。我这里有一个文本内容是这样的:

TestFile.txt---------
abc def    ghi

我想输出的结果是这样的:abcdefghi
文件是这样的…………
#include <iostream>
#include <QFile>
#include <QDataStream>
#include <QString>

int main( int argc, char** argv )
{
    using namespace std;

    QFile file;
    file.setFileName( "TestFile.txt" );
    if ( !file.open( QIODevice::ReadOnly ) )
        cout << "无法打开文件。\n";
    cout << "打开文件成功!准备输出数据。\n";

    QDataStream in( &file );
    QString checkStr;
    do
    {
        in >> checkStr;
        cout << (char*)checkStr.data( );
    }
    while ( !checkStr.isEmpty( ) );
    file.close( );

    return 0;
}

但是程序无法去掉空格将文件的内容逐一输出。我改怎么做才能达到效果呢?
上海Qt开发联盟,热忱地欢迎你的加入!
离线roywillow

只看该作者 1楼 发表于: 2012-10-22
你是认为空格是字符串之间的分割么?
那么问你个问题,如果这个字符串就包括了空格,为啥QTextStream要自作多情地把这个字符串分割开来读取呢?

至于去掉空格,还是直接用replace吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线彩阳

只看该作者 2楼 发表于: 2012-10-22
回 1楼(roywillow) 的帖子
我澄清一下:
想把问题说简单一点,这些字符串是自己编出来的,为的就是解决一个问题,C++标准文件流可以做到,为什么Qt做不到?
请看TestFile.txt:
abc def ghi
请看源程序:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    cout << "这是一个对比实验,可验证C++的文件流可以做到。\n";
    fstream in( "TestFile.txt", ios::in );
    if ( !in )
    {
        cout << "无法打开TestFile.txt。";
    }
    else
    {
        string showStr;
        do
        {
            in >> showStr;
            cout << showStr;
        }
        while ( !in.eof( ) );
        in.close( );
    }
    return 0;
}
请看结果:
这是一个对比实验,可验证C++的文件流可以做到。
abcdefghighi
上海Qt开发联盟,热忱地欢迎你的加入!
离线彩阳

只看该作者 3楼 发表于: 2012-10-23
已经解决了,使用QTextStream而不是QDataStream就好了。
上海Qt开发联盟,热忱地欢迎你的加入!
离线ggkuroky
只看该作者 4楼 发表于: 2012-10-23
                                
相信自己,天道酬勤!
快速回复
限100 字节
 
上一个 下一个