2011-08-31 23 views
1

我有这样的代码:如何获取QFile的字节数?

int *size1 = new int(); 
int *size2 = new int(); 
QFile* file = new QFile("C:/Temp/tf.txt"); 
file->open(QFile::WriteOnly | QFile::Truncate); 
file->write(str); 
    *size1 = file->size(); 
file->close(); 
file->open(QFile::WriteOnly | QFile::Truncate); 
file->write(strC); 
    *size2 = file->size(); 
file->close(); 
delete file; 
if (size1 < size2) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 
delete size1; 
delete size2; 

我想在文件比较字节。但它比较文件中的符号数量。

回答

2

请记住,当你为一个文件写入一个字符时,它可能会成为一个字节,无论如何大部分都是。

#include <QtCore/QCoreApplication> 
#include <QFile> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
QCoreApplication a(argc, argv); 
char *str = "Hello"; 

char *strC = "Hello again!"; 
qint64 size1; 
qint64 size2; 
QFile* file = new QFile("/home/nick/tf.txt"); 
file->open(QFile::WriteOnly | QFile::Truncate); 
file->write(str); 
    size1 = file->size(); 
file->close(); 
file->open(QFile::WriteOnly | QFile::Truncate); 
file->write(strC); 
    size2 = file->size(); 
file->close(); 
delete file; 
QString num1 = QString::number(size1); 
QString num2 = QString::number(size2); 
if (size1 < size2) 
{ 
    qDebug() << "Returning true"; 
    qDebug() << "Size 1 is: " + num1; 
    qDebug() << "Size 2 is: " + num2; 
    return true; 
} 
else 
{ 
    return false; 
} 

return a.exec(); 

}

修改你的代码略有下降。然后生成:

Returning true 
"Size 1 is: 5" 
"Size 2 is: 12" 

看看文件大小如何匹配字符数?每个字符都是一个字节,这就是为什么它看起来像是在计算字符。

3

根据Qt's docs

qint64一个QFile ::尺寸()const的[虚]

从QIODevice中重新实现::尺寸()。

返回文件的大小。

对于Unix上的常规空文件(例如/ proc中的那些文件),该函数返回0;这个文件的内容是根据需要生成的,以响应你调用read()。

它不会返回字节

数量,而不是字符数(我假定这就是你的“符号”的意思。需要注意的是尺寸()返回一个qint64,而不是一个int。 ?

qint64尺寸1 =:您的代码应工作,如果你使用qint64预期

而且,你为什么要使用INT指针中有这样做没有任何好处,只是在栈上创建0;

qint64 size2 = 0;

1

而且 - 比较

if (size1 < size2) 
{ 
    return true; 
} 

是不会做你认为,它比较PTR地址。你可能想...

if (*size1 < *size2) 
{ 
    return true; 
} 

但正如幸运卢克说,没有任何理由把这些放在堆上。