如何从QFile获取字节数?

时间:2011-08-31 15:38:47

标签: c++ qt 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;

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

3 个答案:

答案 0 :(得分:4)

根据Qt's docs

  

qint64 QFile :: size()const [虚拟]

     

从QIODevice :: size()重新实现。

     

返回文件的大小。

     

对于Unix上的常规空文件(例如/ proc中的那些文件),此函数返回0;为响应您调用read()而生成此类文件的内容。

它确实返回字节数,而不是字符数(我假设你的意思是“符号”。注意size()返回一个qint64,而不是一个int。

如果您使用qint64,您的代码应该按预期工作。

另外,为什么使用int指针?这样做没有任何好处,只需在堆栈上创建它:

  

qint64 size1 = 0;

     

qint64 size2 = 0;

答案 1 :(得分: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"

查看文件大小与字符数的匹配程度?每个字符都是一个字节,这就是为什么它看起来像是字符。

答案 2 :(得分:1)

另外 - 比较

if (size1 < size2)
{
    return true;
}

不会按照你的想法做,它会比较ptr地址。你可能想要......

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

但正如Lucky Luke所说,没有理由把它们放在堆上。