• 4563阅读
  • 4回复

QT的数值的极限 [复制链接]

上一主题 下一主题
离线radium_sql
 

只看楼主 倒序阅读 楼主  发表于: 2008-09-10
— 本帖被 XChinux 执行加亮操作(2008-09-11) —
最近写了个小程序,就是写一个文件写到指定大小。比如要写一个200MB的文件。

本来很简单的,但出了些小问题:

void write_b()
{
QFile data("test.cpt");

if (data.open(QFile::WriteOnly|QIODevice::Append))
{
QTextStream out(&data);

QString kk(1024*1024*2, 'a');

while (data.size() < 1024*1024*1024*5) )
{
out<<kk<<endl;
}
}

data.close();
}

当要写的文件大小小于1024*1024*1024的时候,一切还正常,当再大一点,好像就不行了,这一块写文件的地方好像就不执行了。难道QT不能写超过1G的文件?后来我估计是文件规模那一块是一个默认的类型,数值太大发生了溢出了。然后就把红色那一块改写成Q_INT64_C(1024*1024*1024*5),这下一切OK了。

不过我还是想问一问大家,它的那个默认类型是什么?极限值是多少?


QT什么时候替代MFC?
离线nmiirq

只看该作者 1楼 发表于: 2008-09-10
楼主强悍啊,我的硬盘没有那么大的空间来试了。
在32位机上, 2的32方是4294967296,而1021*1021*1024=1073741824,
既然你试过如果比这个小的话,就是OK的,而你如果再*5的话,就超了4294967296了~
说明默认的值是qint32的!
QFile的size()类型就是qint64的,但对于1024*1024*1024*5这个值,你必须用那个宏来定义一个那么大的数值!
离线zhangxudong

只看该作者 2楼 发表于: 2008-09-10
没有什么极限值,而是1024*1024*1024*5超过了32位整数的范围,
data.size() < 1024*1024*1024*5条件不能满足。而data.size() 返回的是qint64。
将1024*1024*1024*5强制转换为64位就可以了
离线radium_sql

只看该作者 3楼 发表于: 2008-09-10
最强悍的是我发现了resize这个函数,生成一个几十G的文件闪一下就好了,吓死人了。我还花这么多时间写一个。

不知是什么原理。
QT什么时候替代MFC?
离线radium_sql

只看该作者 4楼 发表于: 2008-09-10
感谢大家的解答。
QT什么时候替代MFC?
快速回复
限100 字节
 
上一个 下一个